pool.go 638 Bytes
Newer Older
“李磊”'s avatar
“李磊” committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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)
}