Categorygithub.com/oxtoacart/bpool
modulepackage
0.0.0-20190530202638-03653db5a59c
Repository: https://github.com/oxtoacart/bpool.git
Documentation: pkg.go.dev

# README

bpool GoDoc

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.

# Functions

NewBufferPool creates a new BufferPool bounded to the given size.
NewBytePool creates a new BytePool bounded to the given maxSize, with new byte arrays sized based on width.
NewByteSlicePool creates a new ByteSlicePool bounded to the given maxSize, with new byte arrays sized based on width.
NewHeaderPreservingByteSlicePool creates a new ByteSlicePool bounded to the given maxSize, with new byte arrays sized based on width and headerLength preserved at the beginning of the slice.
SizedBufferPool creates a new BufferPool bounded to the given size.
WrapByteSlice wraps a []byte as a ByteSlice.

# Structs

BufferPool implements a pool of bytes.Buffers in the form of a bounded channel.
BytePool implements a leaky pool of []byte in the form of a bounded channel.
ByteSlice provides a wrapper around []byte with some added convenience.
SizedBufferPool implements a pool of bytes.Buffers in the form of a bounded channel.

# Interfaces

ByteSlicePool is a bool of byte slices.