需求:1. gin服务器抛出的任何异常都不会导致服务停止,所有未知异常统一返回自定义提示消息及状态码
2. 访问不存在的资源或url统一返回自定义提示消息及状态码
-
全局捕获500
封装一个中间件,创建的gin的router时使用该中间件
package main import ( "github.com/gin-gonic/gin" "log" "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(200,gin.H{ "code":"4444", "msg":"服务器内部错误", }) } }() //加载完 defer recover,继续后续接口调用 c.Next() } func main(){ r := gin.New() r.Use(Recover) }
-
全局捕获404
使用gin自带的
NoRoute()