Golang简单的对象池
- 复用的好处
- 减少gc压力
- 减少不必要的内存分配
import (
"fmt"
"sync"
)
var bufPool sync.Pool
type buf struct {
b []byte
}
func main() {
for {
var bf *buf
// 从池中取数据
v := bufPool.Get()
if v == nil {
//若不存在buf,创建新的
fmt.Println("no buf ,create!")
bf = &buf{
b: make([]byte, 10),
}
} else {
// 池里存在buf,v这里是interface{},需要做类型转换
bf = v.(*buf)
}
fmt.Println("使用数据", bf)
// bf使命完成,放入池中
bufPool.Put(bf)
}
}