你如何在 Go 中初始化一个大小为 N 的空 bytes.Buffer?

cmc*_*nty 7 go

n在 Go 中使用创建大小的空缓冲区的最简单方法是什么bytes.NewBuffer()

cmc*_*nty 14

在此处添加一些其他信息。在文档字符串的末尾简要提到了创建新缓冲区的快速方法:

b := new(bytes.Buffer)
Run Code Online (Sandbox Code Playgroud)

或者

b := &bytes.Buffer{}
Run Code Online (Sandbox Code Playgroud)

所述Buffer结构定义包括一个64字节的内部bootstrap最初被用于小分配字段。一旦超过默认大小,Buffer.buf就会创建一个字节切片并在内部维护。

正如@leafbebop 建议的那样,我们可以使用新切片预先初始化结构的buf字段Buffer

b := bytes.NewBuffer(make([]byte,0,N))
Run Code Online (Sandbox Code Playgroud)

我还找到了使用该Grow()方法的另一种选择:

b := new(bytes.Buffer)
b.Grow(n)
Run Code Online (Sandbox Code Playgroud)

另外值得一提的是,内部buf切片将以cap(buf)*2 + n. 这意味着如果您已将 1MB 写入缓冲区,然后添加 1 个字节,cap()则将增加到2097153个字节。