From 639feedeeef91ff5627cb7056db586873923ab2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E5=BC=80=E5=85=83?= Date: Sat, 30 May 2026 09:47:57 -0700 Subject: [PATCH] demo: add rate limiter (no tests, for gatekeeper demo) --- examples/demo/ratelimit.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 examples/demo/ratelimit.go 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 +} -- 2.34.1