cmcginty
cmcginty

Reputation: 117028

How do you initialize an empty bytes.Buffer of size N in Go?

What is the easiest method to create an empty buffer of size n in Go using bytes.NewBuffer()?

Upvotes: 17

Views: 31517

Answers (2)

E.Howard
E.Howard

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

cmcginty
cmcginty

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

Related Questions