函数尽量不要返回map, slice对象, 这种频繁调用的函数会给gc 带来压力。
小对象要合并。
函数频繁创建的简单的对象,直接返回对象,效果比返回指针效果要好。
避不开,能用sync.Pool 就用,虽然有人说1.10 后不推荐使用sync.Pool,但是压测来看,确实还是用效果,堆累计分配大小能减少一半以上。
类型转换要注意,官方用法消耗特别大,推荐使用雨痕的方式。
避免反复创建slice。
func stringTobyteSlice(s string) []byte {
tmp1 := (*[2]uintptr)(unsafe.Pointer(&s))
tmp2 := [3]uintptr{tmp1[0], tmp1[1], tmp1[1]}
return *(*[]byte)(unsafe.Pointer(&tmp2))
}
func byteSliceToString(bytes []byte) string {
return *(*string)(unsafe.Pointer(&bytes))
}