github.com/songzhibin97/gkit@v1.2.13/restrictor/rate/example_test.go (about) 1 package rate 2 3 import ( 4 "context" 5 "time" 6 7 "golang.org/x/time/rate" 8 ) 9 10 func ExampleNewRate() { 11 // 第一个参数是 r Limit。代表每秒可以向 Token 桶中产生多少 token。Limit 实际上是 float64 的别名 12 // 第二个参数是 b int。b 代表 Token 桶的容量大小。 13 // limit := Every(100 * time.Millisecond); 14 // limiter := rate.NewLimiter(limit, 4) 15 // 以上就表示每 100ms 往桶中放一个 Token。本质上也就是一秒钟产生 10 个。 16 17 // rate: golang.org/x/time/rate 18 limiter := rate.NewLimiter(2, 4) 19 20 af, wf := NewRate(limiter) 21 22 // af.Allow()bool: 默认取1个token 23 // af.Allow() == af.AllowN(time.Now(), 1) 24 af.Allow() 25 26 // af.AllowN(ctx,n)bool: 可以取N个token 27 af.AllowN(time.Now(), 5) 28 29 // wf.Wait(ctx) err: 等待ctx超时,默认取1个token 30 // wf.Wait(ctx) == wf.WaitN(ctx, 1) 31 _ = wf.Wait(context.TODO()) 32 33 // wf.WaitN(ctx, n) err: 等待ctx超时,可以取N个token 34 _ = wf.WaitN(context.TODO(), 5) 35 }