在Go/Gin开发过程中,我们难免会出现异常信息,每当这个时候我们就想统一对异常信息进行处理,通过打印异常信息定位并解决问题。在Web Api开发中我们也可以将异常信息以统一的Json风格返回。
Go全局异常处理
func main() {
// 加载defer异常处理
defer func() {
if err := recover(); err != nil {
// 异常日志
log.Printf("出现异常: %v\n", err)
// 打印错误堆栈信息
debug.PrintStack()
}
}()
var arr = []int{1, 2, 3, 4, 5}
arr[6] = 6
}
Gin全局异常处理
func main() {
router := gin.Default()
// 中间件首先加载Recover,后面中间件和路由的异常信息就即可进行统一异常处理
router.Use(Recover)
router.GET("/test", func(c *gin.Context) {
// 异常情况1:代码异常
// var arr = []int{1, 2, 3, 4, 5}
// arr[6] = 6
// 异常情况2:panic
if true {
panic("异常错误")
}
})
// 运行
router.Run(":8080")
}
func Recover(c *gin.Context) {
// 加载defer异常处理
defer func() {
if err := recover(); err != nil {
// 异常日志
log.Printf("出现异常: %v\n", err)
// 打印错误堆栈信息
debug.PrintStack()
// 返回统一的Json风格
c.JSON(http.StatusOK, gin.H{
"code": "500",
"msg": err,
"success": false,
})
//终止后续操作
c.Abort()
}
}()
//继续操作
c.Next()
}