golang(gin)的全局统一异常处理,并统一返回json

更新时间:2023-05-17 12:25:49 阅读: 评论:0

golang(gin)的全局统⼀异常处理,并统⼀返回json 1.定义Recover中间件
package handler
import(
"awesomeProject/Result"
"/gin-gonic/gin"公文签发
"log"
"net/http"
"runtime/debug"
蔚蓝的天空)
func Recover(c *gin.Context){
家长指导defer func(){
if r :=recover(); r !=nil{
//打印错误堆栈信息
log.Printf("panic: %v\n", r)
debug.PrintStack()
//封装通⽤json返回
//c.JSON(http.StatusOK, Result.Fail(errorToString(r)))
//Result.Fail不是本例的重点,因此⽤下⾯代码代替
c.JSON(http.StatusOK, gin.H{
"code":"1",
"msg":errorToString(r),
"data":nil,
})
//终⽌后续接⼝调⽤,不加的话recover到异常后,还会继续执⾏接⼝⾥后续代码
一招毙命产险理赔系统c.Abort()
}
}()
//加载完 defer recover,继续后续接⼝调⽤
c.Next()
}
// recover错误,转string
func errorToString(r interface{})string{
switch v := r.(type){
ca error:
return v.Error()
default:
return r.(string)
}
}
2.使⽤Recover中间件
func main(){
router := gin.Default()
//注意 Recover 要尽量放在第⼀个被加载
//如不是的话,在recover前的中间件或路由,将不能被拦截到
/
抽动综合症
/程序的原理是:
//1.请求进来,执⾏recover
//2.程序异常,抛出panic
//3.panic被 recover捕获,返回异常信息,并Abort,终⽌这次请求小学生几点上学
router.U(handler.Recover)
router.GET("/ping",func(c *gin.Context){
// ⽆意抛出 panic
var slice =[]int{1,2,3,4,5}
slice[6]=6
})
router.Run(":8080")// listen and rve on 0.0.0.0:8080 (for windows "localhost:8080") }
>摩洛哥足球

本文发布于:2023-05-17 12:25:49,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/667620.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:信息   返回   程序   后续   代码   不能
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图