Reputation: 117028
What is the easiest method to create an empty buffer of size n
in Go using bytes.NewBuffer()
?
Upvotes: 17
Views: 31517
Reputation: 1
The bytes.buffer
zero value is usable as is, so you can skip the initialization step. Code snippet from docs.
var b bytes.Buffer // A Buffer needs no initialization.
b.Write([]byte("Hello "))
Upvotes: 0
Reputation: 117028
Adding some additional info here. The quick way to create a new buffer is briefly mentioned at the end of the doc string:
b := new(bytes.Buffer)
or
b := &bytes.Buffer{}
The Buffer
struct define includes a 64 byte internal bootstrap
field that is initially used for small allocations. Once the default size is exceeded, a byte slice Buffer.buf
is created and internally maintained.
As @leafbebop suggested we can pre-initalize the buf
field of the Buffer
struct using a new slice.
b := bytes.NewBuffer(make([]byte,0,N))
I also found another option to use the Grow()
method:
b := new(bytes.Buffer)
b.Grow(n)
Also it's interesting to point out that the internal buf
slice will grow at a rate of cap(buf)*2 + n
. This means that if you've written 1MB into a buffer and then add 1 byte, your cap()
will increase to 2097153 bytes.
Upvotes: 25