package middleware import ( "fmt" "net/http" "runtime/debug" "hfb_sys/backend/pkg/response" "github.com/gin-gonic/gin" "go.uber.org/zap" ) const contextPanicStack = "panic_stack" func Recovery(_ *zap.Logger) gin.HandlerFunc { return func(c *gin.Context) { defer func() { if recovered := recover(); recovered != nil { err := fmt.Errorf("panic: %v", recovered) _ = c.Error(err) c.Set(contextPanicStack, string(debug.Stack())) if !c.Writer.Written() { response.Error(c, http.StatusInternalServerError, "internal_error", "服务暂时不可用") } c.Abort() } }() c.Next() } }