package bufpool import ( "bytes" "sync" ) // BufPool maintains a buffer pool. type BufPool struct { p sync.Pool } // New creates a new BufPool. func New() *BufPool { return &BufPool{ p: sync.Pool{ New: func() interface{} { return new(bytes.Buffer) }, }, } } // Put resets the buffer and puts it back to the pool. func (p *BufPool) Put(b *bytes.Buffer) { b.Reset() p.p.Put(b) } // Get returns an empty buffer from the pool. It creates a new buffer, if there // is no bytes.Buffer available in the pool. func (p *BufPool) Get() *bytes.Buffer { return p.p.Get().(*bytes.Buffer) }