mirror of
https://gitee.com/shikong-sk/golang-study
synced 2025-05-22 18:08:10 +08:00
39 lines
770 B
Go
39 lines
770 B
Go
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)
|
||
}
|
||
}
|