code: func (tp *BytePool) Init(drainPeriod time.Duration, maxSize uint32) {
  	maxSizeLog := log2Ceil(maxSize)
  	tp.maxSize = (1 << maxSizeLog) - 1
  	// 32-bit catch
  	if tp.maxSize <= 0 {
  		tp.maxSize = math.MaxInt32
  		maxSizeLog = log2Ceil(math.MaxInt32)
  	}
  	tp.list_of_pools = make([]pool, maxSizeLog+1)
  	if drainPeriod > 0 {
  		tp.drainTicker = time.NewTicker(drainPeriod)
  		go func() {
  			for _ = range tp.drainTicker.C {
  				tp.Drain()
  			}
  		}()
  	}
  }
docs: // Initialize BytePool structure. Starts draining regularly if
  // drainPeriod is non zero. MaxSize specifies the maximum length of a
  // byte slice that should be cached (rounded to the next power of 2).
  //
  // Deprecated: Use sync.Pool from the stdlib instead.