34 lines
729 B
Go
34 lines
729 B
Go
package service
|
||
|
||
// AppError 是 service 层对外公开的结构化错误。
|
||
// Message 必须可安全展示给用户,Cause 仅用于保留内部诊断链路,不得直接写入 HTTP 响应。
|
||
type AppError struct {
|
||
Status int
|
||
Code int
|
||
Message string
|
||
Retryable bool
|
||
Cause error
|
||
}
|
||
|
||
func (e *AppError) Error() string {
|
||
if e == nil {
|
||
return ""
|
||
}
|
||
return e.Message
|
||
}
|
||
|
||
func (e *AppError) Unwrap() error {
|
||
if e == nil {
|
||
return nil
|
||
}
|
||
return e.Cause
|
||
}
|
||
|
||
func NewAppError(status int, message string) *AppError {
|
||
return &AppError{Status: status, Message: message}
|
||
}
|
||
|
||
func WrapAppError(status int, message string, cause error) *AppError {
|
||
return &AppError{Status: status, Message: message, Cause: cause}
|
||
}
|