令牌桶限流示例
package main
import (
"context"
"fmt"
"time"
"golang.org/x/time/rate"
)
func main() {
limiter := rate.NewLimiter(1000, 2000)
// 1000表示每秒种产生1000个token,2000表示容量,并且初始状态有2000个token可以消费,突发可达到2000
for {
now := time.Now()
i := 0
for i < 1000 {
limiter.WaitN(context.TODO(), 10)// 消费10个token,没有则等待(参数10不能超过bursts的容量)
//time.Sleep(limiter.ReserveN(time.Now(), 10).Delay())
i += 10
}
fmt.Println(time.Since(now))
}
}