通用 Gin 中间件集合(CORS、TraceID、I18n、可重复读 body、Recover、XSS、path/param)。全局链注册顺序固定,业务侧一般不直接调,仅 XSS 净化函数被 oplog 引用。
关键导出
Recover() gin.HandlerFunc兜底 panic 与c.Error,HTTP 恒 200CORS() / CORSWithConfig(cfg)必须注册在 Auth 之前TraceID() / TraceIDFrom(ctx) / NewTraceID()必须在 CORS 之后I18n() / LocaleFrom(c) i18n.Locale必须在 Auth 之前RepeatableBody() / BodyBytes(c) []byte可重复读请求体SanitizeFormParam / SanitizeJSONParamXSS 净化(oplog 用)
全局链注册顺序固定:Recover → CORS → TraceID → RepeatableBody → AccessLog → XSS → I18n。
典型用法
go
// cmd/standalone/main.go(节选)
r.Use(middleware.Recover())
r.Use(middleware.CORS())
r.Use(middleware.TraceID())
r.Use(middleware.RepeatableBody())
r.Use(middleware.AccessLog())
r.Use(middleware.XSS())
r.Use(middleware.I18n())坑/约定
WARNING
Recover只在!c.Writer.Written()时渲染c.Error,故重复提交中间件 panic 路径刻意不 flush 缓冲区(否则会写入半截响应)。TraceID无条件回写响应头(在c.Next()之前)。- CORS 的
Vary头在判断是否跨域前就加。 I18n把语言写进gin.Context与request.Context(),下游服务取i18n.LocaleFrom必须用c.Request.Context()。 :::
相关页:/architecture/request-flow、/pkg-reference/response-errs、/pkg-reference/misc。