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  }