1.定义Recover中间件
package handler
import (
"awesomeProject/Result"
"github.com/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()
c.JSON(http.StatusOK, gin.H{
"code": "1",
"msg": errorToString(r),
"data": nil,
})
c.Abort()
}
}()
c.Next()
}
func errorToString(r interface{}) string {
switch v := r.(type) {
case error:
return v.Error()
default:
return r.(string)
}
}
2.使用Recover中间件
func main() {
router := gin.Default()
router.Use(handler.Recover)
router.GET("/ping", func(c *gin.Context) {
var slice = []int{1, 2, 3, 4, 5}
slice[6] = 6
})
router.Run(":8080")
}