令牌桶限流示例

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))
	}
}