为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕哥6287543 2023-06-01 15:06:38
我在 Github 上看到了issue,它说 sync.Pool should be used only with pointer types,例如:var TPool = sync.Pool{    New: func() interface{} {       return new(T)    },}是否有意义?怎么样return T{},哪个是更好的选择,为什么?
查看完整描述

2 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

的重点sync.Pool是避免(昂贵的)分配。大型缓冲区等。您分配一些缓冲区,它们保留在内存中,可供重用。因此使用指针。

但是在这里,您将在每一步都复制这些值,从而违背了目的。(假设你T是一个“正常”结构而不是类似的东西SliceHeader


查看完整回答
反对 回复 2023-06-01
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

没有必要。在大多数情况下,它应该是一个指针,因为你想共享一个对象,而不是制作副本。

在某些用例中,这可以是非指针类型,例如某些外部资源的 id。我可以想象一个用字符串表示的路径池(已安装的磁盘驱动器),其中正在进行一些大文件操作。


查看完整回答
反对 回复 2023-06-01
  • 2 回答
  • 0 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信