62 lines
1.3 KiB
Go
62 lines
1.3 KiB
Go
|
package sys_error
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
// 业务错误定义
|
||
|
type BusinessError struct {
|
||
|
// 用户提示信息
|
||
|
UserMsg string
|
||
|
// 错误信息传递(用于开发回溯定位,不给用户展示)
|
||
|
Errors []string
|
||
|
}
|
||
|
|
||
|
// 新建业务错误
|
||
|
// 如果errs为空,则返回一个只包含用户提示信息的业务错误
|
||
|
// 如果errs不为空,如果errs是一个业务错误,则附加错误信息,否则返回一个包含用户提示信息和错误信息的业务错误
|
||
|
func New(userMsg string, errs ...error) *BusinessError {
|
||
|
if len(errs) == 1 {
|
||
|
be, ok := errs[0].(*BusinessError)
|
||
|
if ok {
|
||
|
be.prependUserMsg(userMsg)
|
||
|
return be
|
||
|
} else {
|
||
|
return &BusinessError{
|
||
|
UserMsg: userMsg,
|
||
|
Errors: []string{errs[0].Error()},
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return &BusinessError{
|
||
|
UserMsg: userMsg,
|
||
|
// Errors: convert(errs),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func IsBusinessError(err error) bool {
|
||
|
_, ok := err.(*BusinessError)
|
||
|
return ok
|
||
|
}
|
||
|
|
||
|
func (e *BusinessError) prependUserMsg(userMsg string) {
|
||
|
e.UserMsg = fmt.Sprintf("%s,%s", userMsg, e.UserMsg)
|
||
|
}
|
||
|
|
||
|
// func convert(err []error) []string {
|
||
|
// s := []string{}
|
||
|
// for _, e := range err {
|
||
|
// s = append(s, e.Error())
|
||
|
// }
|
||
|
// return s
|
||
|
// }
|
||
|
|
||
|
func (e *BusinessError) Append(err error) {
|
||
|
e.Errors = append(e.Errors, err.Error())
|
||
|
}
|
||
|
|
||
|
func (e *BusinessError) Error() string {
|
||
|
return strings.Join(e.Errors, ", ")
|
||
|
}
|