首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有必要在sync.Pool新函数中返回指针类型?

是否有必要在sync.Pool新函数中返回指针类型?
EN

Stack Overflow用户
提问于 2019-01-14 09:55:28
回答 2查看 1.3K关注 0票数 0

我在Github上看到了问题,它说sync.Pool应该只使用带有指针类型的,例如:

代码语言:javascript
复制
var TPool = sync.Pool{
    New: func() interface{} {
       return new(T)
    },
}

说得通吗?那么return T{}呢?选择哪一个更好,为什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-14 10:03:39

sync.Pool的全部目的是避免(昂贵的)分配。大型的缓冲区,等等。你分配了几个缓冲区,它们留在内存中,可以重用。因此指针的使用。

但是在这里,您将在每一步中复制值,从而使目的落空。(假设您的T是“正常”结构,而不是类似于SliceHeader)

票数 5
EN

Stack Overflow用户

发布于 2019-01-14 10:03:23

这是不必要的。在大多数情况下,它应该是一个指针,因为您希望共享一个对象,而不是复制。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54179128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档