当前位置: 首页 > news >正文

ErrorMiddleware在gin中间件放前还是后

放最前面(越早注册越好)。

go

r := gin.New() // ✅ 正确:ErrorMiddleware 第一个注册 r.Use(ErrorMiddleware()) // 其他中间件 r.Use(LoggerMiddleware()) r.Use(AuthMiddleware()) r.Use(CORSMiddleware()) // 路由 r.GET("/api/user", getUser)

为什么必须放前面?

Gin 中间件是洋葱模型,注册顺序决定嵌套层次:

plain

ErrorMiddleware (最外层) └── LoggerMiddleware └── AuthMiddleware └── Handler (最内层)

1. recover 必须在最外层

defer recover()只能捕获同一线程(goroutine)内的 panic。如果ErrorMiddleware放在后面:

go

r.Use(AuthMiddleware()) // 如果这里 panic,ErrorMiddleware 捕获不到! r.Use(ErrorMiddleware()) // ❌ 太晚了

只有放在最前面,它的defer才能包裹住后续所有中间件和 Handler。

2. c.Errors 检查不受顺序影响(但放前面更统一)

因为c.Errors是在c.Next()之后检查,无论放哪都能拿到前面累积的错误。但通常规范是:

  • 错误恢复/统一响应 → 最前面

  • 日志记录 → 放 ErrorMiddleware 后面(让它先恢复,再记录)

  • 鉴权/限流 → 更后面

常见正确顺序

go

r.Use(ErrorMiddleware()) // 1. 恢复 + 统一错误响应 r.Use(LoggerMiddleware()) // 2. 记录请求日志(包括错误状态) r.Use(AuthMiddleware()) // 3. 鉴权 r.Use(RateLimit()) // 4. 限流

⚠️ 注意:不要和 gin.Recovery() 一起用

如果你已经用了gin.Default()(内置 Recovery),不要再套自己的 recover,否则内置的先捕获,你的ErrorMiddleware永远 recover 不到:

go

// ❌ 错误:gin.Default 已经内置 Recovery r := gin.Default() r.Use(ErrorMiddleware()) // 这里的 recover 永远抓不到 panic // ✅ 正确:用 gin.New() + 你自己的 ErrorMiddleware r := gin.New() r.Use(ErrorMiddleware())

一句话总结:recover 中间件就像 try-catch,必须包在最外层。

http://www.jsqmd.com/news/1293792/

相关文章:

  • Perlin Noise柏林噪声:从梯度噪声原理到程序化生成实践
  • 广州欧亚康体:商用泳池水处理一站式方案 - 城刊速递
  • 5分钟上手:Java APK解析器的完整使用指南
  • 人防工程防水堵漏工程十大综合口碑榜单,备选新人精选攻略不踩坑 - 工业品网
  • 2026主流三维测力台厂家推荐 适配不同场景需求 - 资讯速览
  • Flutter、Tauri与Electron跨平台开发框架对比
  • 焊接符号讲解
  • Python在芯片健康评估中的实战应用
  • 终极风扇控制指南:用Fan Control打造完美静音电脑
  • 垂直AI vs通用AI:生物医药该怎么选?
  • ffmpeg静态二进制文件:跨平台多媒体处理的终极解决方案
  • 离散制造行业MOM系统落地实施指南:从规划到上线的全流程解析
  • 2026年8月果洛非急救救护车转运指南:重症返乡如何安排 - 小校长
  • Ollama公网暴露实战检测:攻击面拆解、漏洞复现与全套加固方案
  • 基于启发式搜索的最优路径规划算法研究7
  • SNARF-5F荧光探针:高精度pH测量的生物医学突破
  • 免费在线地图编辑器GeoJSON.io:5分钟快速上手的终极地理数据可视化工具
  • 2026年上海网站设计公司推荐:10家实力派服务商核心能力解析 - 资讯速览
  • Java继承关系判断:isAssignableFrom方法与4种实现对比
  • 户外遮阳经销商联系指南:爱大树一体化服务解析 - 城刊速递
  • 【单片机毕设案例分享】基于权限校验的 STM32 电子密码锁系统设计 基于单片机输入校验的智能防盗门锁设计(012501)
  • GHelper终极指南:如何用轻量化工具完全掌控你的华硕笔记本
  • AI 大模型日报 — 2026年7月30日(星期四)
  • 2026年寄行李用什么打包最省钱?这份保姆级攻略请收好 - 快递物流资讯
  • 南通本地家电维修师傅电话推荐|本地维修家电|欧米到家统一报修
  • C++文件操作基础与高效写入优化策略
  • 2026瑶海职场人逆袭计划!库课专升本周末班,工作学历双丰收 - 最新资讯
  • 南京宠物骨科医院实力推荐,莱乐配 CT 多分院专治犬猫关节损伤 - 资讯速览
  • Openclaw多模态AI代理框架开发与部署指南
  • 2026高质量数据集管理平台:行业趋势、权威评估体系与主流厂商深度解析 - 优企甄选