我在Github上看到issue,上面写着sync.Pool只能 用于指针类型,例如:
var TPool = sync.Pool{
New: func() interface{} {
return new(T)
},
}
这有意义吗? return T{}
呢?哪个是更好的选择,为什么呢?
答案 0 :(得分:3)
sync.Pool
的重点是避免分配(昂贵的)分配。较大的缓冲区等。您分配了一些缓冲区,它们留在内存中,可供重用。因此,使用指针。
但是在这里,您将在每个步骤中复制值,从而达到目的。 (假设您的T
是“普通”结构,而不是SliceHeader
之类的东西)
答案 1 :(得分:1)
没有必要。在大多数情况下,它是您要共享对象而不是进行复制的指针。
在某些情况下,它可以是非指针类型,例如某些外部资源的ID。我可以想象一个正在执行一些大文件操作的用字符串表示的路径池(安装的磁盘驱动器)。