# 技巧
- unsafe转换字符串/字节切片的技巧
- 字符串 -> 字节切片:
*(*[]byte)(unsafe.Pointer(&s))
- 缓冲区不能修改,否则 go 会panic!
- 字节切片 -> 字符串:
*(*string)(unsafe.Pointer(&buf))
- 字符串 -> 字节切片:
- 重用缓冲区
- 复位缓冲器
- bytes.Buffer.Reset
- buf = buf[:0]
- 复位缓冲器
- 尽可能直接分配所需大小的数组
- 清空Map使用delete循环而不是新建map(编译器将会优化)
- 在bool仅作为占位符的场景,使用空结构体代替bool以节约内存空间。
- 不发送数据的信道(channel)
- 仅仅包含方法的类型
- 在建立集合等场景,使用空结构体
struct{}
代替bool
,例:
- 不发送数据的信道(channel)
- 在内存敏感的场景下可以通过合理布局结构体,优化内存对齐以优化性能。