go.uber.org/ratelimit
package rlimit
import (
"fmt"
"log"
"testing"
"time"
"go.uber.org/ratelimit"
)
func TestRatelimit(t *testing.T) {
rl := ratelimit.New(5) // per second
log.Println("begin")
prev := time.Now()
for i := 0; i < 20; i++ {
now := rl.Take()
if i > 0 {
fmt.Println(time.Now().String(), i, now.Sub(prev))
}
prev = now
}
log.Println("end")
}
运行结果:
[@hbhly_x_128 rlimit]$ go test -v ./
=== RUN TestRatelimit
2022/03/26 16:57:41 begin
2022-03-26 16:57:42.014050639 +0800 CST m=+0.201108898 1 200ms
2022-03-26 16:57:42.21436404 +0800 CST m=+0.401422303 2 200ms
2022-03-26 16:57:42.415431893 +0800 CST m=+0.602490176 3 200ms
2022-