GPM
并发包
unsafe.Pointer
golang作为强类型静态语言,不允许指针类型转换。所以有了unsafe.Pointer,相当C语言中的void *
四个规则:
- 任何指针都可以转换为unsafe.Pointer
- unsafe.Pointer可以转换为任何指针
- uintptr可以转换为unsafe.Pointer
- unsafe.Pointer可以转换为uintptr
1 | func main() { |
要注意的是,uintptr不能作为临时变量,GC可能会产生潜在问题
atomic.Value
sync.Map
sync.Pool
保存和复用临时对象,减少内存分配,降低GC压力。