// Reset resets the Builder to be empty.
func (b *Builder) Reset() {
b.addr = nil
b.buf = nil
}
这段代码片段来自于go strings.Builder源代码。缓冲区被设置为
nil
,而不是b.buf[:0]
。为什么要将其设置为nil
而不是保留其容量呢?编辑:
Reset()
函数可以用于回收底层缓冲区并允许重新使用Builder结构体,但似乎初始化该结构体只需两个指针的边际成本很小,而底层数组可能要大得多,并且可以被重复使用。我觉得应该有一个Clear()
函数,它可以保留底层缓冲区的容量,但将其长度减少到0,这实现起来非常简单。这让我相信有一个原因阻止了这样做,我很好奇是什么原因。