<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小时全天候智能回复用户消息,自动维护媒体主页,全平台渠道集成管理,电商物流平台一键绑定,让您出海轻松无忧!
相关推荐
2501_930707781 小时前
使用C#代码压平 PDF 表单字段m0_470857641 小时前
CSS如何实现Bootstrap进度条自定义动画_利用keyframe关键帧nashane1 小时前
HarmonyOS 6学习:Navigation Dialog模式与智能Web长截图融合实践treesforest1 小时前
IP数据库下载完全指南:免费与商业IP定位库对比书语时1 小时前
单体 MySQL 支撑业务的上限一般从哪里先触顶?如何论证瓶颈在 DB?m0_624578591 小时前
SQL高效实现基于JOIN的交叉分析_多表关联实现多维统计威联通网络存储1 小时前
QNAP 闪存底座:制造企业 ERP 数据库容灾方案城数派1 小时前
1958-2024年乡镇的逐月土壤湿度数据ReSearch1 小时前
sfsEdgeStore:边缘计算时代的轻量级数据存储解决方案