函数尽量不要返回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))

}