package logjson import ( "bytes" "sync" ) const ( bytesBufferInitialSize = 512 bytesBufferMaximumSize = 4096 ) var DefaultBytesBufferPool = NewBytesBufferPool(bytesBufferInitialSize, bytesBufferMaximumSize) type BytesBufferPool interface { Get() *bytes.Buffer Put(buffer *bytes.Buffer) } // NewBytesBufferPool 创建并返回 BytesBufferPool func NewBytesBufferPool(initialSize, maximumSize int) BytesBufferPool { return &bytesBufferPool{ pool: sync.Pool{ New: func() any { return bytes.NewBuffer(make([]byte, 0, initialSize)) }, }, maximumSize: maximumSize, } } type bytesBufferPool struct { pool sync.Pool maximumSize int } func (pool *bytesBufferPool) Get() *bytes.Buffer { return pool.pool.Get().(*bytes.Buffer) } func (pool *bytesBufferPool) Put(buf *bytes.Buffer) { if buf.Cap() > pool.maximumSize { return } pool.pool.Put(buf) }