code: func newEncodePool(f EncoderFunc) *encoderPool {
  	// get a new encoder and type assert to see if it can be reset
  	e := f(nil)
  	re, ok := e.(ResettableEncoder)
  
  	p := &encoderPool{fn: f}
  
  	// if the encoder can be reset, create a pool and put the typed encoder in
  	if ok {
  		p.pool = &sync.Pool{
  			New: func() interface{} { return f(nil) },
  		}
  		p.pool.Put(re)
  	}
  
  	return p
  }
docs: // newEncodePool checks to see if the EncoderFactory returns reusable encoders and if so, creates
  // a pool.