package errorsx import ( "fmt" "go.uber.org/zap" "runtime/debug" ) // ErrorHandler 错误处理接口 type ErrorHandler interface { HandleError(error, string) } // DefaultHandler 默认错误处理器 type DefaultHandler struct{} // HandleError 处理错误并记录日志 func (h *DefaultHandler) HandleError(err error, context string) { if err == nil { return } // 记录错误信息和调用栈 zap.S().Errorw( fmt.Sprintf("%s: %v", context, err), "stack", string(debug.Stack()), ) } // Wrap 错误包装,保留调用链 func Wrap(err error, message string) error { if err == nil { return nil } return fmt.Errorf("%s: %w", message, err) } // Must panic 如果 err 不为 nil func Must(err error, message string) { if err != nil { panic(fmt.Sprintf("%s: %v", message, err)) } } // LogError 记录错误但不中断 func LogError(err error, context string) { if err != nil { zap.S().Errorw(fmt.Sprintf("%s: %v", context, err)) } } // LogWarn 记录警告 func LogWarn(err error, context string) { if err != nil { zap.S().Warnw(fmt.Sprintf("%s: %v", context, err)) } }