// Package errors 提供错误处理框架 package errors import ( "errors" "fmt" "strings" "git.kingecg.top/kingecg/installerbuilder/internal/logger" ) // Wrap 包装错误,添加上下文信息 func Wrap(err error, message string) error { if err == nil { return nil } return fmt.Errorf("%s: %w", message, err) } // WrapWithCode 包装错误,添加错误代码和组件信息 func WrapWithCode(err error, code, component, message string, details map[string]interface{}) Error { if err == nil { return nil } return NewBuildError(code, component, message, err, details) } // IsCode 检查错误是否具有特定的错误代码 func IsCode(err error, code string) bool { var buildErr *BuildError if errors.As(err, &buildErr) { return buildErr.Code() == code } return false } // LogError 记录错误并返回原始错误 func LogError(err error, component string) error { if err == nil { return nil } var buildErr *BuildError if errors.As(err, &buildErr) { fields := logger.Fields{ "code": buildErr.Code(), "component": buildErr.Component(), } for k, v := range buildErr.Details() { fields[k] = v } logger.WithFields(fields).Error(buildErr.Error()) } else { logger.WithField("component", component).Error(err.Error()) } return err } // FormatErrorList 格式化错误列表为字符串 func FormatErrorList(errors []error) string { if len(errors) == 0 { return "" } messages := make([]string, len(errors)) for i, err := range errors { messages[i] = err.Error() } return strings.Join(messages, "\n") }