package middleware import ( "github.com/gin-gonic/gin" "net/http" "runtime/debug" "skapp/pkg/logger" "skapp/pkg/utils/errorx" ) // ErrorHandler // gin 全局异常处理 func ErrorHandler() gin.HandlerFunc { return func(c *gin.Context) { defer func() { if r := recover(); r != nil { err := parseError(r) //打印错误堆栈信息 logger.Log.Error(err) debug.PrintStack() //封装通用JSON返回 c.JSON(http.StatusOK, errorx.NewDefaultError(err)) //终止后续接口调用,不加的话recover到异常后,还会继续执行接口里后续代码 c.Abort() } }() //加载完 defer recover,继续后续的插件及代码执行 c.Next() } } func parseError(r interface{}) string { switch v := r.(type) { case error: return v.Error() default: return r.(string) } }