Awesome
bpool
Package bpool implements leaky pools of byte arrays and Buffers as bounded channels. It is based on the leaky buffer example from the Effective Go documentation: http://golang.org/doc/effective_go.html#leaky_buffer
bpool provides the following pool types:
- bpool.BufferPool which provides a fixed-size pool of bytes.Buffers.
- bpool.BytePool which
provides a fixed-size pool of
[]byte
slices with a pre-set width (length). - bpool.SizedBufferPool,
which is an alternative to
bpool.BufferPool
that pre-sizes the capacity of buffers issued from the pool and discards buffers that have grown too large upon return.
A common use case for this package is to use buffers to execute HTML templates
against (via ExecuteTemplate) or encode JSON into (via json.NewEncoder). This
allows you to catch any rendering or marshalling errors prior to writing to a
http.ResponseWriter
, which helps to avoid writing incomplete or malformed data
to the response.
Install
go get github.com/oxtoacart/bpool
Documentation
See godoc.org or use godoc github.com/oxtoacart/bpool
Example
Here's a quick example for using bpool.BufferPool
. We create a pool of the
desired size, call the Get()
method to obtain a buffer for use, and call
Put(buf)
to return the buffer to the pool.
var bufpool *bpool.BufferPool
func main() {
bufpool = bpool.NewBufferPool(48)
}
func someFunction() error {
// Get a buffer from the pool
buf := bufpool.Get()
...
...
...
// Return the buffer to the pool
bufpool.Put(buf)
return nil
}
License
Apache 2.0 Licensed. See the LICENSE file for details.