code: func (p *bufferPool) Upgrade(bs []byte, size int) []byte {
  	if cap(bs) >= size {
  		// Reslicing is enough, lets go!
  		return bs[:size]
  	}
  
  	// It was too small. But it pack into the pool and try to get another
  	// buffer.
  	p.Put(bs)
  	return p.Get(size)
  }
docs: // Upgrade grows the buffer to the requested size, while attempting to reuse
  // it if possible.