sync.Pool 新函数中是否需要返回指针类型?

我在 Github 上看到了issue,它说 sync.Pool should be used only with pointer types,例如:

var TPool = sync.Pool{

    New: func() interface{} {

       return new(T)

    },

}

是否有意义?怎么样return T{},哪个是更好的选择,为什么?


慕哥6287543
浏览 77回答 2
2回答

千巷猫影

的重点sync.Pool是避免(昂贵的)分配。大型缓冲区等。您分配一些缓冲区,它们保留在内存中,可供重用。因此使用指针。但是在这里,您将在每一步都复制这些值,从而违背了目的。(假设你T是一个“正常”结构而不是类似的东西SliceHeader)

婷婷同学_

没有必要。在大多数情况下,它应该是一个指针,因为你想共享一个对象,而不是制作副本。在某些用例中,这可以是非指针类型,例如某些外部资源的 id。我可以想象一个用字符串表示的路径池(已安装的磁盘驱动器),其中正在进行一些大文件操作。
打开App,查看更多内容
随时随地看视频慕课网APP