| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 | package middlewareimport (	"github.com/gin-gonic/gin"	"log"	"net/http"	"runtime/debug"	"ulink-admin/frame")func Recover(c *frame.Context) {	defer func() {		if r := recover(); r != nil {			//打印错误堆栈信息			log.Printf("panic: %v\n", r)			debug.PrintStack()			errorToString(c, r)			//终止后续接口调用,不加的话recover到异常后,还会继续执行接口里后续代码			c.Abort()		}	}()	//加载完 defer recover,继续后续接口调用	c.Next()}// recover错误,转stringfunc errorToString(c *frame.Context, r interface{}) {	switch v := r.(type) {	case error:		c.JSON(http.StatusOK, gin.H{			"status": 500,			"msg":    v.Error(),			"data":   nil,		})	case frame.Exception:		c.JSON(http.StatusOK, gin.H{			"status": v.Status,			"msg":    v.Msg,			"data":   nil,		})	default:		c.JSON(http.StatusOK, gin.H{			"status": 500,			"msg":    v.(string),			"data":   nil,		})	}}
 |