Files
zogo/examples/ipratelimiter/main.go
T
4566704 9ff1a0e816 feat(ipratelimiter): 自 go-hua 迁入按 IP 令牌桶限流器并修正包子句
- 包子句 IPRateLimiter → ipratelimiter(符合 Go 小写命名惯例), 消费方
  限定符同步; 新增依赖 golang.org/x/time
- 附测试、examples/ipratelimiter 例程与包 README
2026-09-20 12:29:37 +08:00

35 lines
792 B
Go

// ipratelimiter 包示例:按 IP 维度的令牌桶限流器
package main
import (
"fmt"
"time"
"git.zeroonesoft.cn/golib/zogo/ipratelimiter"
"golang.org/x/time/rate"
)
func main() {
// 每秒补充 2 个令牌,桶容量 3
limiter := ipratelimiter.NewIPRateLimiter(rate.Limit(2), 3)
ip := "192.168.1.100"
allowed := 0
for i := 0; i < 10; i++ {
// GetLimiter:该 IP 不存在时自动创建
l := limiter.GetLimiter(ip)
if l.Allow() {
allowed++
fmt.Printf("第 %2d 次请求: 放行\n", i+1)
} else {
fmt.Printf("第 %2d 次请求: 拒绝\n", i+1)
}
time.Sleep(50 * time.Millisecond)
}
fmt.Printf("共放行 %d 次\n", allowed)
// 不同 IP 相互独立限流
fmt.Println("另一 IP 首次请求放行:", limiter.GetLimiter("10.0.0.1").Allow())
}