go get golang.org/x/time/rate
package main
import (
"log"
"time"
"golang.org/x/time/rate"
)
func main() {
// 创建一个每秒产生5个令牌,桶容量为10的限流器
log.Printf("调整前")
limiter := rate.NewLimiter(5, 10)
for i := 0; i < 3; i++ {
for j := 0; j < 10; j++ {
if limiter.Allow() {
log.Printf("limiter allow")
} else {
log.Printf("limiter deny")
}
}
time.Sleep(time.Second)
}
// 动态调整限流值
log.Printf("调整后")
limiter.SetLimit(3)
limiter.SetBurst(30)
for i := 0; i < 3; i++ {
for j := 0; j < 10; j++ {
if limiter.Allow() {
log.Printf("limiter allow")
} else {
log.Printf("limiter deny")
}
}
time.Sleep(time.Second)
}
}
2026/03/05 07:59:31 调整前
2026/03/05 07:59:32 limiter allow
2026/03/05 07:59:32 limiter allow
2026/03/05 07:59:32 limiter allow
2026/03/05 07:59:32 limiter allow
2026/03/05 07:59:32 limiter allow
2026/03/05 07:59:32 limiter allow
2026/03/05 07:59:32 limiter allow
2026/03/05 07:59:32 limiter allow
2026/03/05 07:59:32 limiter allow
2026/03/05 07:59:32 limiter allow
2026/03/05 07:59:33 limiter allow
2026/03/05 07:59:33 limiter allow
2026/03/05 07:59:33 limiter allow
2026/03/05 07:59:33 limiter allow
2026/03/05 07:59:33 limiter allow
2026/03/05 07:59:33 limiter deny
2026/03/05 07:59:33 limiter deny
2026/03/05 07:59:33 limiter deny
2026/03/05 07:59:33 limiter deny
2026/03/05 07:59:33 limiter deny
2026/03/05 07:59:34 limiter allow
2026/03/05 07:59:34 limiter allow
2026/03/05 07:59:34 limiter allow
2026/03/05 07:59:34 limiter allow
2026/03/05 07:59:34 limiter allow
2026/03/05 07:59:34 limiter deny
2026/03/05 07:59:34 limiter deny
2026/03/05 07:59:34 limiter deny
2026/03/05 07:59:34 limiter deny
2026/03/05 07:59:34 limiter deny
2026/03/05 07:59:35 调整后
2026/03/05 07:59:35 limiter allow
2026/03/05 07:59:35 limiter allow
2026/03/05 07:59:35 limiter allow
2026/03/05 07:59:35 limiter allow
2026/03/05 07:59:35 limiter allow
2026/03/05 07:59:35 limiter deny
2026/03/05 07:59:35 limiter deny
2026/03/05 07:59:35 limiter deny
2026/03/05 07:59:35 limiter deny
2026/03/05 07:59:35 limiter deny
2026/03/05 07:59:36 limiter allow
2026/03/05 07:59:36 limiter allow
2026/03/05 07:59:36 limiter allow
2026/03/05 07:59:36 limiter deny
2026/03/05 07:59:36 limiter deny
2026/03/05 07:59:36 limiter deny
2026/03/05 07:59:36 limiter deny
2026/03/05 07:59:36 limiter deny
2026/03/05 07:59:36 limiter deny
2026/03/05 07:59:36 limiter deny
2026/03/05 07:59:37 limiter allow
2026/03/05 07:59:37 limiter allow
2026/03/05 07:59:37 limiter allow
2026/03/05 07:59:37 limiter deny
2026/03/05 07:59:37 limiter deny
2026/03/05 07:59:37 limiter deny
2026/03/05 07:59:37 limiter deny
2026/03/05 07:59:37 limiter deny
2026/03/05 07:59:37 limiter deny
2026/03/05 07:59:37 limiter deny