package signature import "sync" const poolSliceMaxSize = 128 * 1024 type buffer struct { data []byte } var buffersPool = sync.Pool{ New: func() any { return new(buffer) }, } func tryGetNewBufferFromPool(size int) (*buffer, bool) { if size > poolSliceMaxSize { return &buffer{}, false } return newBufferFromPool(size), true } func newBufferFromPool(size int) *buffer { result := buffersPool.Get().(*buffer) if cap(result.data) < size { result.data = make([]byte, size) } else { result.data = result.data[:size] } return result } func returnBufferToPool(buf *buffer) { if cap(buf.data) > poolSliceMaxSize { return } buf.data = buf.data[:0] buffersPool.Put(buf) }