code: func (p *Pool) Get() interface{} {
  	p.mu.Lock()
  	var x interface{}
  	if n := len(p.list); n > 0 {
  		x = p.list[n-1]
  		p.list[n-1] = nil // Just to be safe
  		p.list = p.list[:n-1]
  	}
  	p.mu.Unlock()
  	if x == nil && p.New != nil {
  		x = p.New()
  	}
  	return x
  }
docs: // Get selects an arbitrary item from the Pool, removes it from the
  // Pool, and returns it to the caller.
  // Get may choose to ignore the pool and treat it as empty.
  // Callers should not assume any relation between values passed to Put and
  // the values returned by Get.
  //
  // If Get would otherwise return nil and p.New is non-nil, Get returns
  // the result of calling p.New.