包的源代码中的Pool 结构中有一个 New 函数sync,其定义如下
type Pool struct {
local unsafe.Pointer // local fixed-size per-P pool, actual type is [P]poolLocal
localSize uintptr // size of the local array
// New optionally specifies a function to generate
// a value when Get would otherwise return nil.
// It may not be changed concurrently with calls to Get.
New func() interface{}
}
在Facebook 创建的golang 堆栈跟踪包的第 103 行,在同步池结构中定义了一个匿名函数,如下所示New::
var pcsPool = sync.Pool{
New: func() interface{} {
return make([]uintptr, maxStackSize)
},
}
所以,从源代码中的注释来看,我假设 Facebook 包已经“指定了一个函数来生成一个值,当 Get 否则返回 nil 时”,但为什么它会被定义为New:这样呢?
相关分类