Yin 东亮

Go 语言的 Context 源码分析

11月 24, 2020
源码分析, Golang

研究 Context 的源码,有助于对结合运用 interface 和 struct 的理解,以及对其他三方框架对 Context 接口的重新实现也能有一定认识,在实际开发中更是非常有帮助。Context 的源码非常短小,加上大概一半的注释整个文件也才 500 行,500 行就 ...

Go 语言中 Channel 的实现

11月 6, 2020
源码分析, 数据结构, Golang

关于 Go 并发设计的哲学中,最常见的一句话就是:不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存1。Go 语言采用 CSP(Communicating sequential processes)并发模型,底层运用 Channel 实 ...

权限系统通用的设计模型

10月 29, 2020
系统设计

权限系统是一个比较通用的系统,几乎所有的后台业务都会涉及到,关于权限系统的设计经过一些最佳实践也已经被总结成各种模型,比如 ACL、RBAC、ABAC、PBAC等,下面开始详细介绍。 基本概念 # 在很多权限 ...

了解下 Protobuf 相关概念

9月 22, 2020
HTTP, 计算机网络, 系统设计, Golang

说 Protobuf 之前,要先知道 RPC 是什么,可以说 Protobuf 是实现 RPC 的接口描述语言。 RPC # RPC,全称 Remote Procedure Call,中文叫远程过程调用。 go 语言基于标准库实现了一套自己的 RPC 调用规则:方法只能有两个可序列化的参数,其中第二个参数是 ...

乒乓理财,了解一下? R

7月 25, 2020
Life, Recommended, 乒乓球

谁需要看 # 如果你有100 万要理财,这个不适合你。如果你只有 1 万?那向你介绍一下我总结的理财方案~ 认识乒乓球拍 # 关于球拍的分类,我从各个角度出发整理了一个图: 可见,正是球拍的种类非常之多,每种特性组合在 ...

Panic:assignment to entry in nil map

7月 23, 2020
Golang

参考以下代码,运行时会报 panic: assignment to entry in nil map。 package main import "fmt" func main() { var m map[string]int m["a"] = 1 fmt.Println(m["a"]) } //panic: assignment to entry in nil map 查了一下原因,发现是通过 var m map[string]int 得到的值是 nil, 不指向任何内存地址。需要通过 make 方法才可以分配确定的内存地址。 这个问题官 ...

Kafka 和 RabbitMQ 对比 R

7月 11, 2020
Database, Recommended, 系统设计, 读书笔记

消息队列中间件(Message Queue Middleware,简称 MQ)在后端领域扮演很重要的角色,但是笔者之前日常多止步于使用,对机制原理研究很少。之前用 Python 写 Web 服务的时候,用到 RabbitMQ 的情况比较多,可能是因为有一 ...

Gin Web 框架中 Middleware 的实现原理

7月 2, 2020
源码分析, Golang

Gin 和很多 Web 框架一样实现了 middleware(中间件)的功能,通过 Gin 提供的中间件,我们在业务逻辑处理每个请求之前进行一些通用的逻辑,比如身份校验、数据解密、签名认证、服务限流等功能。 使用方法 # 看起来很 ...

Go 语言中 Goroutine 的并发数量控制

6月 19, 2020
Golang, 并发编程

虽然 Goroutine 号称占用的内存非常小,初始化只有几 K 大小,但是很多时候确实还是需要控制一台机器的 Goroutine 的并发数量,以进行业务上的可控并发场景的需要,或防止异常情况下的CPU、内存过载进而导致服务不可用的情况。 通过 Channel ...


© 2012 - 2025 YINDONGLIANG.COM