使用bytes.NewBuffer()
在Go中创建大小为n
的空缓冲区的最简单方法是什么?
答案 0 :(得分:2)
在此处添加一些其他信息。在doc字符串的末尾简要提到了创建新缓冲区的快捷方法:
b := new(bytes.Buffer)
或
b := &bytes.Buffer{}
Buffer
struct define包含一个64字节的内部bootstrap
字段,最初用于小分配。超过默认大小后,将创建一个字节片Buffer.buf
并进行内部维护。
正如@leafbebop建议我们可以使用新切片预先初始化buf
结构的Buffer
字段。
b := bytes.NewBuffer(make([]byte,0,N))
我还找到了使用Grow()
方法的另一种选择:
b := new(bytes.Buffer)
b.Grow(n)
同样有趣的是,内部buf
切片将以cap(buf)*2 + n
的速度增长。这意味着如果您已将1MB写入缓冲区然后添加1个字节,则cap()
将增加到2097153个字节。
答案 1 :(得分:-1)
// Set up a buffer to temporarily hold the encoded data.
var buf bytes.Buffer
// Write JSON-encoded data to a buffer of bytes.
// This buffer will grow to whatever size necessary to
// hold the buffered data.
err := json.NewEncoder(&buf).Encode(&v)
// Send the HTTP request. Whatever is read from the Reader
// will be sent in the request body.
// The buffer is also a Reader, so it can be passed in here.
// Its data will be read out until the buffer is complete.
resp, err := http.Post(“example.com”, “application/json”, &buf)