中间件系统是 Gin 框架的核心组件,它允许在 HTTP 请求生命周期中执行自定义代码。中间件函数在 HTTP 请求到达最终处理程序之前拦截它们,也可以在之后处理响应。本页介绍了 Gin 中间件系统的架构和用法,包括内置和自定义中间件组件。
有关特定内置中间件组件的信息,请参阅内置中间件。
Gin 中的中间件遵循基于链的执行模型,其中多个中间件函数按顺序组织。每个中间件都可以在链中的后续中间件之前和之后执行操作。
当请求到达时,Gin 按以下顺序执行中间件
c.Next() 时,控制权将传递给下一个中间件c.Next() 调用之后的任何代码都将在返回路径上执行理解中间件执行的关键在于,每个中间件函数都可以在链中的其余部分 *之前* 和 *之后* 执行代码。
来源: middleware_test.go17-43 context.go187-195
中间件可以全局注册(用于所有路由),为一组路由注册,或为特定路由注册。
中间件系统由 Gin 框架中的三个主要组件提供支持
Gin 中的每个 HTTP 请求都通过一个 Context 对象进行处理,该对象包含一个 HandlersChain — 一个包含所有中间件和最终路由处理程序的处理程序切片。
Context 结构中的 index 字段跟踪中间件链中的当前位置。
来源: context.go57-93
Gin 提供多种方法来控制中间件的执行流程
| 方法 | 描述 |
|---|---|
c.Next() | 执行链中的待处理程序 |
c.Abort() | 阻止调用待处理程序 |
c.AbortWithStatus(code) | 中止并设置 HTTP 状态码 |
c.AbortWithStatusJSON(code, obj) | 中止并发送 JSON 响应 |
c.AbortWithError(code, err) | 中止并返回状态码和错误 |
Gin 提供多种内置中间件组件
Logger 中间件记录关于每个请求的信息,例如状态码、路径、延迟和客户端 IP。
来源: logger.go191-281
Recovery 中间件可从处理程序链中的任何 panic 中恢复,并返回 500 错误,而不是使服务器崩溃。
在 Gin 中创建自定义中间件需要定义一个返回 HandlerFunc 的函数
处理请求时,中间件执行遵循以下步骤
Next() 方法执行中间件链Next() 之前执行代码Next() 来执行链的其余部分Next() 调用返回后执行代码Abort() 来停止链的执行来源: context.go184-195 middleware_test.go159-183
c.Set() 和 c.Get() 在请求生命周期中传递数据刷新此 Wiki
最后索引时间2025 年 4 月 18 日(49e913)