news 2026/4/23 14:38:51

Go语言怎么做API限流_Go语言令牌桶限流教程【实战】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Go语言怎么做API限流_Go语言令牌桶限流教程【实战】

Go 推荐用 golang.org/x/time/rate.Limiter 实现令牌桶限流,因其轻量、线程安全、支持突发控制;需复用实例、合理设置 rate 和 burst(如 rate.Every(100ms), burst=20),并在路由前统一拦截,避免误用 Allow() 或 per-request 新建。Go 用 golang.org/x/time/rate 做令牌桶限流最稳妥标准库没限流,但官方扩展包 rate.Limiter 就是为这个场景设计的——轻量、线程安全、支持突发流量控制。别自己手写计数器或用第三方轮子,除非你明确要绕过它的精度/阻塞逻辑。常见错误是把 rate.NewLimiter 当成“每秒放行 N 个请求”的开关,其实它默认允许突发(burst > 1),且 Allow() 不阻塞,Wait() 才会等令牌。用错就等于没限流。rate.NewLimiter(rate.Every(100*time.Millisecond), 3) 表示:平均 100ms 生成 1 个令牌,最多攒 3 个(burst=3)高并发下优先用 limiter.Wait(ctx),避免 Allow() 返回 true 后实际被后端压垮HTTP handler 中不要每个请求 new 一个 Limiter,必须复用实例,否则 burst 完全失效HTTP middleware 里怎么嵌入限流逻辑限流必须在路由分发前做,否则中间件顺序错乱会导致部分 handler 被跳过。别在 handler 内部调 limiter.Wait(),那是给单个业务逻辑用的,不是 API 网关级控制。典型错误是把限流写在 http.HandleFunc 闭包里,导致每个路径都独立限流——而你真正想控的是总 QPS 或按 IP 分组。立即学习“go语言免费学习笔记(深入)”;用 http.Handler 包装原始 mux,统一拦截:http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if err := limiter.Wait(r.Context()); err != nil { http.Error(w, "too many requests", http.StatusTooManyRequests); return } next.ServeHTTP(w, r) })需要按 IP 限流?从 r.RemoteAddr 提取客户端 IP(注意 X-Forwarded-For 可伪造,生产需结合真实 IP 提取逻辑)别在 middleware 里用 time.Sleep 模拟等待——这会占 goroutine,limiter.Wait() 是非阻塞调度,更省资源rate.Limiter 的 burst 参数为什么不能设太小burst 是令牌桶的“水池大小”,设成 1 就退化成严格匀速限流,但真实流量天然有毛刺。用户连续点两次刷新、前端重试、CDN 预热都会触发瞬时高峰,burst=1 会让合法请求直接 429。 Vozo Vozo是一款强大的AI视频编辑工具,可以帮助用户轻松重写、配音和编辑视频。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 14:38:22

SAP MM顾问实战:MRP Area(执行范围)的三种级别到底怎么选?附工厂、保管场所、外注先配置详解

SAP MRP Area配置实战:工厂、保管场所与外注先级别的深度决策指南 当资深SAP MM顾问面对MRP Area配置时,往往会在三种执行级别间陷入选择困境。这不仅关系到系统运行效率,更直接影响企业物料计划的精确度与灵活性。本文将带您穿透理论迷雾&a…

作者头像 李华
网站建设 2026/4/23 14:36:50

Zotero 7升级挑战:Better BibTeX架构兼容性与平滑迁移策略

Zotero 7升级挑战:Better BibTeX架构兼容性与平滑迁移策略 【免费下载链接】zotero-better-bibtex Make Zotero effective for us LaTeX holdouts 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-better-bibtex 作为LaTeX用户的核心生产力工具&#xf…

作者头像 李华
网站建设 2026/4/23 14:33:26

告别CentOS?统信UOS Server 1060实战评测:性能、兼容性与迁移成本初探

统信UOS Server 1060深度评测:企业级替代方案的可行性分析 当CentOS转向Stream更新模式后,许多企业开始重新评估服务器操作系统的长期选择。作为国产操作系统的代表之一,统信UOS Server 1060凭借其稳定性与安全性逐渐进入技术决策者的视野。本…

作者头像 李华
网站建设 2026/4/23 14:33:02

揭秘论文降重新利器:书匠策AI,让学术写作如虎添翼!

在学术的浩瀚宇宙中,论文写作是每位探索者展现智慧与才华的璀璨星辰。然而,面对重复率这座难以逾越的大山,以及AIGC(人工智能生成内容)悄然带来的“机械感”阴影,许多学者和学生不禁感到力不从心。别怕&…

作者头像 李华
网站建设 2026/4/23 14:30:33

Steam Account Generator:批量账号创建与管理的自动化解决方案

Steam Account Generator:批量账号创建与管理的自动化解决方案 【免费下载链接】Steam-Account-Generator Steam Account Generator by DedSec [ Use https://accgen.cathook.club/ ] 项目地址: https://gitcode.com/gh_mirrors/st/Steam-Account-Generator …

作者头像 李华