package configure import ( "fmt" ) // ClientError SDK客户端错误 type ClientError struct { Op string // 操作名称 Message string // 错误信息 Err error // 底层错误 } // Error 实现error接口 func (e *ClientError) Error() string { if e.Err != nil { return fmt.Sprintf("configure client error [%s]: %s: %v", e.Op, e.Message, e.Err) } return fmt.Sprintf("configure client error [%s]: %s", e.Op, e.Message) } // Unwrap 实现错误解包 func (e *ClientError) Unwrap() error { return e.Err } // 错误定义 var ( // 配置错误 ErrConfigInvalidURL = &ClientError{Op: "config", Message: "invalid URL"} ErrConfigInvalidAuth = &ClientError{Op: "config", Message: "invalid authentication credentials"} ErrConfigInvalidAuthType = &ClientError{Op: "config", Message: "invalid authentication type"} // 请求错误 ErrRequestFailed = &ClientError{Op: "request", Message: "HTTP request failed"} ErrRequestTimeout = &ClientError{Op: "request", Message: "request timeout"} ErrInvalidResponse = &ClientError{Op: "request", Message: "invalid response format"} // API错误 ErrAPIError = &ClientError{Op: "api", Message: "API returned error"} ErrNotFound = &ClientError{Op: "api", Message: "resource not found"} ErrAlreadyExists = &ClientError{Op: "api", Message: "resource already exists"} ErrUnauthorized = &ClientError{Op: "api", Message: "unauthorized"} ErrForbidden = &ClientError{Op: "api", Message: "forbidden"} ErrValidationFailed = &ClientError{Op: "api", Message: "validation failed"} // 客户端错误 ErrClientNotInitialized = &ClientError{Op: "client", Message: "client not initialized"} ) // NewClientError 创建新的客户端错误 func NewClientError(op, message string, err error) *ClientError { return &ClientError{ Op: op, Message: message, Err: err, } } // WrapError 包装错误为客户端错误 func WrapError(op, message string, err error) error { if err == nil { return nil } // 如果已经是ClientError,直接返回 if ce, ok := err.(*ClientError); ok { return ce } return NewClientError(op, message, err) }