repo: https://github.com/juju/ratelimit

type Bucket

  1. type Bucket struct {
  2. // contains filtered or unexported fields
  3. }

func NewBucket(fillInterval time.Duration, capacity int64) *Bucket

  • 按指定间隔向桶里填充一个令牌,直到 capacity,桶初始化是满的 ```go //返回令牌桶可用的数量 func (tb *Bucket) Available() int64

//返回桶初始容量 func (tb *Bucket) Capacity() int64

//填充速率,以秒为单位 func (tb *Bucket) Rate() float64

// Take从桶中取出令牌而不阻塞。它返回调用者在令牌实际可用之前应该等待的时间。 func (tb *Bucket) Take(count int64) time.Duration

//不阻塞取出,没有返回0 func (tb *Bucket) TakeAvailable(count int64) int64

//TakeMaxDuration类似于Take,只是它只在令牌的等待时间不大于maxWait时才从bucket中获取令牌。 //如果等待令牌可用的时间比maxWait长,那么它将不执行任何操作,并报告false, //否则它将返回调用者应该等待的时间,直到令牌真正可用,然后报告true。 func (tb *Bucket) TakeMaxDuration(count int64, maxWait time.Duration) (time.Duration, bool)

// 阻塞取出,桶内没有可用的则等待 func (tb *Bucket) Wait(count int64)

// 阻塞取出,桶内没有可用的则等待maxWait,到maxWait还没可用,则返回false func (tb *Bucket) WaitMaxDuration(count int64, maxWait time.Duration) bool
```