分类:Golang 源码研究清除筛选

Golang源码研究:3. unsafe包

使用unsafe包修改私有成员 在go中,私有成员是不允许在外部更改的,但是我们可以通过go提供的unsafe.offset做偏移计算从而修改私有成员。 输出如下 利用unsafe获取silce和map长度 根据上文所说的,通过unsafe直接获取私有成员的值,array 作为一个指针,指向所属的底层数组。 占用内存为8字节(64位系统),通过分别偏移8字节和16字节,即可获取到len和cap的值…

Golang源码研究:2. context 上下文

context 是啥? context 中文叫做上下文,是 goroutine 的上下文。主要用于在不同的goroutine中传递上下文。 主要应用于 取消信号、超时时间、截止时间、k-v传递。并且是并发安全的。 context 有什么用 超时管理,上游因为种种原因提前关闭了链接、或者超过了请求方要求的时间,就需要快速退出掉这条链路上的所有的goroutine。 k-v 传递,在多个不同的goro…

Golang源码研究:1. 切片扩容问题

很多语言中都存在类似动态数组的概念,c++中的vector,Golang里的silce,都是类似动态数组概念。 silce的组成 从源码中可以看到,go中的silce结构体包含三个部分,array len cap. array传入的是一个指针,用作silce的底层存储数组。len是silce的长度,cap则是底层数组的大小。 当silce的len逐渐逼近cap的时候(len达到cap的一半),将会…