<p>golang.org/x/time/rate 是 Go 官方推荐的令牌桶限流方案,核心为 rate.Limiter 和 rate.Limit;需按需动态创建实例隔离限流维度,配合 Retry-After 和 X-RateLimit- headers 提升兼容性,注意时钟依赖与性能边界。</p>Go 用 golang.org/x/time/rate 做令牌桶限流最稳妥标准库没有内置限流,golang.org/x/time/rate 是官方维护、生产验证过的唯一推荐方案。别自己手写计数器或基于 time.Ticker 模拟,精度差、并发不安全、漏桶/令牌桶语义模糊。它核心就两个类型:rate.Limiter(你直接用的)和 rate.Limit(每秒放多少令牌)。初始化时传入期望的 QPS 和最大突发量(burst),比如 rate.NewLimiter(10, 5) 表示平均 10 QPS,最多允许 5 次瞬时请求打进来。limiter.Wait(ctx) 是最常用方式:阻塞直到拿到令牌,适合必须执行的请求(如支付)limiter.Allow() 返回 bool:立刻返回是否能执行,适合可降级场景(如日志上报)limiter.Reserve() 返回 *rate.Reservation:能精确控制等待时间或取消,但多数人用不到HTTP 中间件里嵌 rate.Limiter 别共享实例一个 rate.Limiter 实例是并发安全的,但如果你把同一个实例用在所有路由上,就变成全局限流------这通常不是你想要的。比如用户 A 和用户 B 共享配额,或者 /login 和 /api/data 被同一套规则卡住。更常见的需求是按 IP、用户 ID 或 API 路径做隔离限流。这时候得动态生成 Limiter 实例,或用 map 缓存:立即学习"go语言免费学习笔记(深入)"; JoinMC智能客服 JoinMC智能客服,帮您熬夜加班,7X24小时全天候智能回复用户消息,自动维护媒体主页,全平台渠道集成管理,电商物流平台一键绑定,让您出海轻松无忧!
相关推荐
霍小毛2 小时前
数字孪生+AI重构风电运营:从“靠天吃饭“到“精准掌控“的能源革命geNE GENT2 小时前
SQL 中UPDATE 和 DELETE 语句的深入理解与应用yanghuashuiyue2 小时前
LangGraph框架研究-生产djjdjdjdjjdj2 小时前
Go语言如何做延迟队列_Go语言延迟消息队列教程【核心】weixin_458580122 小时前
如何在 Laravel 中筛选并格式化匹配预定义列表的产品数据2301_777599372 小时前
使用 Go 语言安全高效地将 SSH 公钥复制到远程服务器后端漫漫2 小时前
Redis 原子能力与并发控制Navicat中国2 小时前
Navicat 企业版数据传输是否支持达梦 → OceanBase迁移?数据迁移报错weixin_568996062 小时前
Vue.js生命周期destroyed钩子中内存泄漏排查与资源释放