code: func New(num int, rate float64, depth uint64) *Filter {
  	b := new(Filter)
  	if depth <= 0 {
  		panic("depth of bucket must be greater than 0")
  	}
  	b.touchCost = uint64((float64(1*time.Second) / rate))
  	b.creditMax = depth * b.touchCost
  	b.items = make([]item, num)
  
  	// Not the full range of a uint64, but we can
  	// live with 2 bits of entropy missing
  	b.key0 = uint64(rand.Int63())
  	b.key1 = uint64(rand.Int63())
  
  	return b
  }
docs: // New creates a new token bucket filter with num buckets, accruing tokens at rate per second. The depth specifies
  // the depth of the bucket.