package module
v2.0.0 Latest Latest

This package is not in the latest version of its module.

Go to latest
Published: Oct 10, 2017 License: MIT Imports: 4 Imported by: 111


Pool GoDoc Build Status

Pool is a thread safe connection pool for net.Conn interface. It can be used to manage and reuse connections.

Install and Usage

Install the package with:

go get gopkg.in/fatih/pool.v2

Import it with:

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

and use pool as the package name inside the code.


// create a factory() to be used with channel based pool
factory    := func() (net.Conn, error) { return net.Dial("tcp", "") }

// create a new channel based pool with an initial capacity of 5 and maximum
// capacity of 30. The factory will create 5 initial connections and put it
// into the pool.
p, err := pool.NewChannelPool(5, 30, factory)

// now you can get a connection from the pool, if there is no connection
// available it will create a new one via the factory function.
conn, err := p.Get()

// do something with conn and put it back to the pool by closing the connection
// (this doesn't close the underlying connection instead it's putting it back
// to the pool).

// close the underlying connection instead of returning it to pool
// it is useful when acceptor has already closed connection and conn.Write() returns error
if pc, ok := conn.(*pool.PoolConn); ok {

// close pool any time you want, this closes all the connections inside a pool

// currently available connections in the pool
current := p.Len()



The MIT License (MIT) - see LICENSE for more details



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



This section is empty.


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


This section is empty.


type Factory

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

Factory is a function to create new connections.

type Pool

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.

	// 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

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

type PoolConn struct {
	// contains filtered or unexported fields

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

func (*PoolConn) Close

func (p *PoolConn) Close() error

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

func (*PoolConn) MarkUnusable

func (p *PoolConn) MarkUnusable()

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

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL