package main import ( "fmt" "github.com/gin-gonic/gin" ) // 自定义 Recovery 中间件 func CustomRecovery() gin.HandlerFunc { return func(c *gin.Context) { defer func() { if err := recover(); err != nil { // 记录错误 fmt.Printf("Panic: %v\n", err) // 返回友好的错误响应 c.JSON(500, gin.H{ "error": "Internal Server Error", "message": fmt.Sprintf("%v", err), }) // 中止处理链 c.Abort() } }() c.Next() } } func main() { r := gin.New() // 使用自定义 Recovery r.Use(CustomRecovery()) r.Use(gin.Logger()) // 正常路由 r.GET("/", func(c *gin.Context) { c.JSON(200, gin.H{"message": "OK"}) }) // 故意触发 panic r.GET("/panic", func(c *gin.Context) { panic("Something went wrong!") }) r.Run(":9999") }