golang-study/gin/internal/middleware/error.go

39 lines
770 B
Go
Raw Normal View History

2024-11-14 00:43:23 +08:00
package middleware
import (
"net/http"
"runtime/debug"
"github.com/gin-gonic/gin"
"gin-study/pkg/errorx"
)
// gin 全局异常处理
func ErrorHandler() gin.HandlerFunc {
return func(c *gin.Context) {
defer func() {
if r := recover(); r != nil {
err := parseError(r)
//打印错误堆栈信息
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)
}
}