package errors import ( "errors" "fmt" ) // 中间件标准错误类型 var ( ErrMissingToken = errors.New("missing authentication token") ErrInvalidToken = errors.New("invalid or expired token") ErrRedisUnavailable = errors.New("redis unavailable") ErrTooManyRequests = errors.New("too many requests") ) // AppError 表示带错误码的应用错误 type AppError struct { Code int // 应用错误码 Message string // 错误消息 Err error // 底层错误(可选) } func (e *AppError) Error() string { if e.Err != nil { return fmt.Sprintf("%s: %v", e.Message, e.Err) } return e.Message } func (e *AppError) Unwrap() error { return e.Err } // New 创建新的 AppError func New(code int, message string) *AppError { return &AppError{ Code: code, Message: message, } } // Wrap 用错误码和消息包装现有错误 func Wrap(code int, message string, err error) *AppError { return &AppError{ Code: code, Message: message, Err: err, } }