// Package errors 定义应用程序的错误类型 package errors import ( "errors" "fmt" ) // 预定义错误 var ( // 用户相关错误 ErrUserNotFound = errors.New("用户不存在") ErrUserAlreadyExists = errors.New("用户已存在") ErrEmailAlreadyExists = errors.New("邮箱已被注册") ErrInvalidPassword = errors.New("密码错误") ErrAccountDisabled = errors.New("账号已被禁用") // 认证相关错误 ErrUnauthorized = errors.New("未授权") ErrInvalidToken = errors.New("无效的令牌") ErrTokenExpired = errors.New("令牌已过期") ErrInvalidSignature = errors.New("签名验证失败") // 档案相关错误 ErrProfileNotFound = errors.New("档案不存在") ErrProfileNameExists = errors.New("角色名已被使用") ErrProfileLimitReached = errors.New("已达档案数量上限") ErrProfileNoPermission = errors.New("无权操作此档案") // 材质相关错误 ErrTextureNotFound = errors.New("材质不存在") ErrTextureExists = errors.New("该材质已存在") ErrTextureLimitReached = errors.New("已达材质数量上限") ErrTextureNoPermission = errors.New("无权操作此材质") ErrInvalidTextureType = errors.New("无效的材质类型") // 验证码相关错误 ErrInvalidVerificationCode = errors.New("验证码错误或已过期") ErrTooManyAttempts = errors.New("尝试次数过多") ErrSendTooFrequent = errors.New("发送过于频繁") // URL验证相关错误 ErrInvalidURL = errors.New("无效的URL格式") ErrDomainNotAllowed = errors.New("URL域名不在允许的列表中") // 存储相关错误 ErrStorageUnavailable = errors.New("存储服务不可用") ErrUploadFailed = errors.New("上传失败") // 通用错误 ErrBadRequest = errors.New("请求参数错误") ErrInternalServer = errors.New("服务器内部错误") ErrNotFound = errors.New("资源不存在") ErrForbidden = errors.New("权限不足") ) // AppError 应用错误类型,包含错误码和消息 type AppError struct { Code int // HTTP状态码 Message string // 用户可见的错误消息 Err error // 原始错误(用于日志) } // Error 实现error接口 func (e *AppError) Error() string { if e.Err != nil { return fmt.Sprintf("%s: %v", e.Message, e.Err) } return e.Message } // Unwrap 支持errors.Is和errors.As func (e *AppError) Unwrap() error { return e.Err } // NewAppError 创建新的应用错误 func NewAppError(code int, message string, err error) *AppError { return &AppError{ Code: code, Message: message, Err: err, } } // NewBadRequest 创建400错误 func NewBadRequest(message string, err error) *AppError { return NewAppError(400, message, err) } // NewUnauthorized 创建401错误 func NewUnauthorized(message string) *AppError { return NewAppError(401, message, nil) } // NewForbidden 创建403错误 func NewForbidden(message string) *AppError { return NewAppError(403, message, nil) } // NewNotFound 创建404错误 func NewNotFound(message string) *AppError { return NewAppError(404, message, nil) } // NewInternalError 创建500错误 func NewInternalError(message string, err error) *AppError { return NewAppError(500, message, err) } // Is 检查错误是否匹配 func Is(err, target error) bool { return errors.Is(err, target) } // As 尝试将错误转换为指定类型 func As(err error, target interface{}) bool { return errors.As(err, target) } // Wrap 包装错误 func Wrap(err error, message string) error { if err == nil { return nil } return fmt.Errorf("%s: %w", message, err) }