func (p *LimitedBytes) Put(c []byte) {
	if cap(c) >= p.maxSize {
		return
	}
	select {
	case p.pool <- c:
	default:
	}
}
Put returns a slice back to the pool.  If the pool is full, the byte
slice is discarded.  If the byte slice is over the configured max size
of any byte slice in the pool, it is discared.
package pool
type Bytes struct {
	pool chan []byte
}
func NewBytes(max int) *Bytes {
	return &Bytes{
		pool: make(chan []byte, max),
	}
}
func (p *Bytes) Get(sz int) []byte {
	var c []byte
	select {
	case c = <-p.pool:
	default:
		return make([]byte, sz)
	}
	if cap(c) < sz {
		return make([]byte, sz)
	}
	return c[:sz]
}
func (p *Bytes) Put(c []byte) {
	select {
	case p.pool <- c:
	default:
	}
}
type LimitedBytes struct {
	maxSize int
	pool    chan []byte
}
func NewLimitedBytes(capacity int, maxSize int) *LimitedBytes {
	return &LimitedBytes{
		pool:    make(chan []byte, capacity),
		maxSize: maxSize,
	}
}
func (p *LimitedBytes) Get(sz int) []byte {
	var c []byte
	select {
	case c = <-p.pool:
	default:
		return make([]byte, sz)
	}
	if cap(c) < sz {
		return make([]byte, sz)
	}
	return c[:sz]
}