Files
2026-04-03 10:29:38 +08:00

102 lines
1.7 KiB
Go

package zerror
import (
"errors"
"fmt"
)
type ZError struct {
ErrCode ZErrorCode `json:"err_code,omitempty"`
ErrMsg string `json:"err_msg,omitempty"`
errs []error
}
func (e *ZError) Error() string {
if e == nil {
return ""
}
if e.ErrMsg != "" {
return fmt.Sprintf("ErrCode:%s; ErrMsg:%s;", e.ErrCode, e.ErrMsg)
}
res := ""
if e.errs == nil || len(e.errs) == 0 {
return res
}
var first = true
for _, err := range e.errs {
if first {
res = err.Error()
first = false
} else {
res += ";" + err.Error()
}
}
return res
}
func (e *ZError) Errors() []error {
if e == nil {
return nil
}
return e.errs
}
func (e *ZError) Append(err error) {
if e == nil || err == nil {
return
}
ze, ok := err.(*ZError)
if ok {
e.errs = append(e.errs, ze.errs...)
} else {
e.errs = append(e.errs, err)
}
}
func NewByErr(err ...error) error {
res := &ZError{
errs: make([]error, 0),
}
for i, e := range err {
if e == nil {
continue
}
ze, ok := err[i].(*ZError)
if ok {
res.errs = append(res.errs, ze.errs...)
} else {
res.errs = append(res.errs, err[i])
}
}
if len(res.errs) > 0 {
return res
}
return nil
}
func NewByCode(errCode ZErrorCode, errMsg ...string) error {
msg := ""
if len(errMsg) > 0 {
msg = errMsg[0]
} else {
msg = getErrMsg(errCode)
}
return &ZError{
ErrCode: errCode,
ErrMsg: msg,
}
}
func NewByMsg(msg string) error {
err := errors.New(msg)
return NewByErr(err)
}
func Errors(err error) []error {
if err == nil {
return nil
}
ze, ok := err.(*ZError)
if !ok {
return []error{err}
}
//将一个空的[]error切片与ze.Errors()返回的错误切片合并在一起
//返回一个新切片
return append(([]error)(nil), ze.Errors()...)
}