Gin默认中间件
Gin 提两个默认中间件,简化常见功能配置。
gin.Default() 默认中间件
Go
r := gin.Default() // 默认包含 Logger 和 Recovery 中间件
// 等价于
r := gin.New()
r.Use(gin.Logger())
r.Use(gin.Recovery())
gin.New() 无中间件
Go
r := gin.New() // 不包含任何中间件,需要手动添加
Logger 中间件
默认日志中间件,记录请求信息:
Go
func main() {
r := gin.Default()
// Logger 自动记录:
// [GIN] 2026/05/18 - 10:00:00 | 200 | 2.5ms | 127.0.0.1 | GET "/api/users"
r.GET("/ping", func(c *gin.Context) {
c.String(200, "pong")
})
r.Run(":8080")
}
自定义 Logger 格式
Go
func customLogger() gin.HandlerFunc {
return gin.LoggerWithFormatter(func(param gin.LogFormatterParams) string {
return fmt.Sprintf("[GIN] %v | %d | %v | %s | %s %s \n",
param.TimeStamp.Format("2006-01-02 15:04:05"),
param.StatusCode,
param.Latency,
param.ClientIP,
param.Method,
param.Path,
)
})
}
r := gin.New()
r.Use(customLogger())
禁用特定路径日志
Go
func skipLogger() gin.HandlerFunc {
return gin.LoggerWithWriter(gin.DefaultWriter, "/health", "/metrics")
}
r.Use(skipLogger())
Recovery 中间件
异常恢复中间件,捕获 panic 避免 panic 中断整个程序:
Go
func main() {
r := gin.Default()
r.GET("/panic", func(c *gin.Context) {
panic("something went wrong") // Recovery 会捕获
})
// Recovery 捕获后返回 500 状态码,程序继续运行
r.Run(":8080")
}
自定义 Recovery
Go
func customRecovery() gin.HandlerFunc {
return gin.CustomRecovery(func(c *gin.Context, err interface{}) {
c.JSON(500, gin.H{
"code": 500,
"message": "服务器内部错误",
"error": fmt.Sprintf("%v", err),
})
})
}
r := gin.New()
r.Use(customRecovery())
自定义默认中间件组合
Go
func main() {
r := gin.New()
// 自定义中间件组合
r.Use(customLogger())
r.Use(customRecovery())
r.Use(corsMiddleware()) // 添加 CORS
r.GET("/api", handler)
r.Run(":8080")
}
中间件对比
| 方法 | 包含中间件 | 使用场景 |
|---|---|---|
gin.Default() | Logger + Recovery | 开发、生产默认 |
gin.New() | 无 | 自定义配置 |
生产环境配置
Go
func main() {
gin.SetMode(gin.ReleaseMode) // 设置生产模式
r := gin.New()
r.Use(gin.Logger())
r.Use(gin.Recovery())
// 业务路由
r.GET("/api/users", listUsers)
r.Run(":8080")
}
生产环境必须启用 Recovery,防止 panic 导致服务崩溃。
要点总结
gin.Default()自动加载 Logger 和 Recoverygin.New()无中间件,需手动添加- Logger 记录请求日志,Recovery 捕获 panic
- 可自定义日志格式和异常处理逻辑
- 生产环境必须启用 Recovery 保证服务稳定
📝 发现内容有误?点击此处直接编辑