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

更新时间:2023-05-23 10:43:14 阅读: 评论: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()
completely//封装通⽤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)澳洲留学
suicide is painless}
}小学英语游戏
2.使⽤Recover中间件
func main(){
router := gin.Default()
//注意 Recover 要尽量放在第⼀个被加载
//如不是的话,在recover前的中间件或路由,将不能被拦截到
/
/程序的原理是:wisdom是什么意思
//1.请求进来,执⾏recover
google词典//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
inpractice})
router.Run(":8080")// listen and rve on 0.0.0.0:8080 (for windows "localhost:8080") }
rec

本文发布于:2023-05-23 10:43:14,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/119468.html

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

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