97 lines
2.2 KiB
Go
97 lines
2.2 KiB
Go
package errors
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
// 错误类型定义
|
|
var (
|
|
ErrNotFound = errors.New("resource not found")
|
|
ErrInvalidInput = errors.New("invalid input")
|
|
ErrInternalServer = errors.New("internal server error")
|
|
ErrUnauthorized = errors.New("unauthorized")
|
|
ErrForbidden = errors.New("forbidden")
|
|
ErrConflict = errors.New("conflict")
|
|
ErrBadRequest = errors.New("bad request")
|
|
ErrTimeout = errors.New("timeout")
|
|
ErrServiceUnavailable = errors.New("service unavailable")
|
|
)
|
|
|
|
// AppError 应用错误结构
|
|
type AppError struct {
|
|
Err error
|
|
Message string
|
|
Code int
|
|
}
|
|
|
|
func (e *AppError) Error() string {
|
|
if e.Message != "" {
|
|
return e.Message
|
|
}
|
|
return e.Err.Error()
|
|
}
|
|
|
|
func (e *AppError) Unwrap() error {
|
|
return e.Err
|
|
}
|
|
|
|
// NewAppError 创建新的应用错误
|
|
func NewAppError(err error, message string, code int) *AppError {
|
|
return &AppError{
|
|
Err: err,
|
|
Message: message,
|
|
Code: code,
|
|
}
|
|
}
|
|
|
|
// WrapError 包装错误
|
|
func WrapError(err error, message string) error {
|
|
return fmt.Errorf("%s: %w", message, err)
|
|
}
|
|
|
|
// IsNotFound 检查是否为资源未找到错误
|
|
func IsNotFound(err error) bool {
|
|
return errors.Is(err, ErrNotFound)
|
|
}
|
|
|
|
// IsInvalidInput 检查是否为无效输入错误
|
|
func IsInvalidInput(err error) bool {
|
|
return errors.Is(err, ErrInvalidInput)
|
|
}
|
|
|
|
// IsInternalServer 检查是否为内部服务器错误
|
|
func IsInternalServer(err error) bool {
|
|
return errors.Is(err, ErrInternalServer)
|
|
}
|
|
|
|
// IsUnauthorized 检查是否为未授权错误
|
|
func IsUnauthorized(err error) bool {
|
|
return errors.Is(err, ErrUnauthorized)
|
|
}
|
|
|
|
// IsForbidden 检查是否为禁止访问错误
|
|
func IsForbidden(err error) bool {
|
|
return errors.Is(err, ErrForbidden)
|
|
}
|
|
|
|
// IsConflict 检查是否为冲突错误
|
|
func IsConflict(err error) bool {
|
|
return errors.Is(err, ErrConflict)
|
|
}
|
|
|
|
// IsBadRequest 检查是否为请求错误
|
|
func IsBadRequest(err error) bool {
|
|
return errors.Is(err, ErrBadRequest)
|
|
}
|
|
|
|
// IsTimeout 检查是否为超时错误
|
|
func IsTimeout(err error) bool {
|
|
return errors.Is(err, ErrTimeout)
|
|
}
|
|
|
|
// IsServiceUnavailable 检查是否为服务不可用错误
|
|
func IsServiceUnavailable(err error) bool {
|
|
return errors.Is(err, ErrServiceUnavailable)
|
|
}
|