| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 | package codesimport (	"encoding/json"	"fmt"	"strconv"	"github.com/go-kratos/kratos/v2/errors")func Error(code int, msg string) error {	e := errors.New(400, "", msg)	e = e.WithMetadata(map[string]string{		"code": fmt.Sprint(code),	})	return e}func ErrorData(code int, msg string, data interface{}) error {	j, _ := json.Marshal(data)	e := errors.New(400, string(j), msg)	e = e.WithMetadata(map[string]string{		"code": fmt.Sprint(code),	})	return e}func CommonError(err error) error {	se := errors.FromError(err)	if se == nil {		return Error(10400, err.Error())	}	return se}func SystemErr(msg string) error {	return Error(10500, msg)}// Customize 自定义返回值. 如自己重定向func Customize() error {	return Error(1000, "")}func ParseErrorWithData(err error, data interface{}) (int, string) {	st := errors.FromError(err)	if st == nil {		return 0, err.Error()	}	message := st.Message	metadata := st.GetMetadata()	code := st.Code	if _, ok := metadata["code"]; ok {		_code, _ := strconv.Atoi(metadata["code"])		code = int32(_code)	}	if data != nil {		if st.Reason != "" {			json.Unmarshal([]byte(st.Reason), data)		}	}	return int(code), message}func ParseError(err error) (int, string) {	return ParseErrorWithData(err, nil)}func ParseErrorMsg(err error) string {	_, msg := ParseErrorWithData(err, nil)	return msg}func ErrorEqual(err1 error, err2 error) bool {	code1, msg1 := ParseError(err1)	code2, msg2 := ParseError(err2)	if code1 == 0 && code2 == 0 {		if msg1 == msg2 {			return true		}		return false	}	if code1 == code2 {		return true	}	return false}
 |