Gin 使用中间件进行全局错误处理。异常处理中间件,异常信息返回,请求响应结构体
Gin 中使用中间件进行全局错误处理。异常处理中间件,异常信息返回
请求响应结构体
复制
import (
"github.com/gin-gonic/gin"
"gorm.io/gorm/utils"
"net/http"
)
type Result[T any] struct {
Data T `json:"data"`
Code string `json:"code"`
Msg string `json:"msg"`
Status bool `json:"status"`
}
func Success[T any](ctx *gin.Context, data T, msg string) {
ctx.JSON(http.StatusOK, Result[T]{
Data: data,
Code: utils.ToString(http.StatusOK),
Msg: msg,
Status: true,
})
}
func SuccessData[T any](ctx *gin.Context, data T) {
Success[T](ctx, data, "")
}
func SuccessMsg(ctx *gin.Context, msg string) {
Success[any](ctx, nil, msg)
}
func Error[T any](ctx *gin.Context, data T, msg string) {
ctx.JSON(http.StatusOK, Result[T]{
Data: data,
Code: utils.ToString(http.StatusInternalServerError),
Msg: msg,
Status: false,
})
}
func ErrorData[T any](ctx *gin.Context, data T) {
Error[T](ctx, data, "")
}
func ErrorMsg(ctx *gin.Context, msg string) {
Error[any](ctx, nil, msg)
}
异常处理中间件
复制
import (
"blog/tool"
"github.com/gin-gonic/gin"
"log"
)
func ErrorResultHandle() gin.HandlerFunc {
return func(ctx *gin.Context) {
defer func() {
if err := recover(); err != nil {
log.Println(err)
tool.ErrorMsg(ctx, "服务端异常")
return
}
}()
ctx.Next()
}
}
中间件注册
复制
func Handler() http.Handler {
handler := gin.Default()
handler.Use(response.ErrorResultHandle())
return handler
}
使用方法
复制
import (
"blog/tool"
"github.com/gin-gonic/gin"
"log"
)
func Hello(ctx *gin.Context) {
log.Panic("手动异常")
tool.SuccessData(ctx, "hello world!")
}
使用后效果

Preview

Preview
0
0
0
238
No data