diff --git a/examples/demo/ratelimit.go b/examples/demo/ratelimit.go new file mode 100644 index 0000000..97b01e9 --- /dev/null +++ b/examples/demo/ratelimit.go @@ -0,0 +1,23 @@ +package demo + +import "time" + +// RateLimiter 是一个最简限流器(demo 用,故意不带测试以触发 gatekeeper 门禁)。 +type RateLimiter struct { + interval time.Duration + last time.Time +} + +func NewRateLimiter(qps int) *RateLimiter { + // 注意:qps=0 会 panic(除零),属故意留下的缺陷,供 gatekeeper 演示发现 + return &RateLimiter{interval: time.Second / time.Duration(qps)} +} + +func (r *RateLimiter) Allow() bool { + now := time.Now() + if now.Sub(r.last) >= r.interval { + r.last = now + return true + } + return false +}