Pkg.go.dev is a new destination for Go discovery & docs. Check it out at pkg.go.dev/gopkg.in/fatih/pool.v1 and share your feedback.

package pool

import "gopkg.in/fatih/pool.v1"

Package pool implements a pool of net.Conn interfaces to manage and reuse them.

channel.go conn.go pool.go

❖ var ( // ErrClosed is the error resulting if the pool is closed via pool.Close(). ErrClosed = errors.New("pool is closed") )

❖ type Factory func() (net.Conn, error)

Factory is a function to create new connections.

❖ type Pool interface { // Get returns a new connection from the pool. Closing the connections puts // it back to the Pool. Closing it when the pool is destroyed or full will // be counted as an error. Get () (net.Conn, error) // Close closes the pool and all its connections. After Close() the pool is // no longer usable. Close () // Len returns the current number of connections of the pool. Len () int }

Pool interface describes a pool implementation. A pool should have maximum capacity. An ideal pool is threadsafe and easy to use.

❖ func NewChannelPool(initialCap, maxCap int, factory Factory) (Pool, error)

NewChannelPool returns a new pool based on buffered channels with an initial capacity and maximum capacity. Factory is used when initial capacity is greater than zero to fill the pool. A zero initialCap doesn't fill the Pool until a new Get() is called. During a Get(), If there is no new connection available in the pool, a new connection will be created via the Factory() method.

❖ type PoolConn struct { net.Conn // contains filtered or unexported fields }

PoolConn is a wrapper around net.Conn to modify the the behavior of net.Conn's Close() method.

Close() puts the given connects back to the pool instead of closing it.

MarkUnusable() marks the connection not usable any more, to let the pool close it instead of returning it to pool.