package coco import ( "errors" "fmt" ) const UnknownError = "unknown" const ( // ErrorNil 正常 ErrorNil = 0 // ErrorInternalServer 系统错误 ErrorInternalServer = 500 // ErrorNotImplemented 方法没有实现 ErrorNotImplemented = 501 // ErrorBadGateway 网关错误 ErrorBadGateway = 502 // ErrorServiceUnavailable 服务不可用 ErrorServiceUnavailable = 503 // ErrorGatewayTimeout 网关超时 ErrorGatewayTimeout = 504 // ErrorBadRequest 请求参数无效 ErrorBadRequest = 400 // ErrorUnauthorized 未授权访问 ErrorUnauthorized = 401 // ErrorPaymentRequired 缺少参数 ErrorPaymentRequired = 402 // ErrorForbidden 禁止访问 ErrorForbidden = 403 // ErrorNotFound 找不到记录 ErrorNotFound = 404 // ErrorMethodNotAllowed 请求不被允许 ErrorMethodNotAllowed = 405 // ErrorNotAcceptable 不被接受的请求 ErrorNotAcceptable = 406 // ErrorProxyAuthenticationRequired 代理需要授权 ErrorProxyAuthenticationRequired = 407 // ErrorRequestTimeout 请求超时 ErrorRequestTimeout = 408 // ErrorConflict 资源冲突 ErrorConflict = 409 // ErrorFreqLimit 路由频率限制 [业务级] ErrorFreqLimit = 1004 // ErrorRequestBroken 请求熔断 ErrorRequestBroken = 1005 // ErrorRequestRateLimit 请求流控 [服务级] ErrorRequestRateLimit = 1006 // ErrorParamEmpty 请求参数为空 ErrorParamEmpty = 1007 ) var ( errCodeMap = map[int32]string{ ErrorNil: "ok", ErrorInternalServer: "internal server error", ErrorNotImplemented: "method not implemented", ErrorBadGateway: "bad gateway", ErrorServiceUnavailable: "service unavailable", ErrorGatewayTimeout: "gateway timeout", ErrorBadRequest: "bad request", ErrorUnauthorized: "unauthorized", ErrorPaymentRequired: "payment required", ErrorForbidden: "forbidden", ErrorNotFound: "not found", ErrorMethodNotAllowed: "method not allowed", ErrorNotAcceptable: "not acceptable", ErrorProxyAuthenticationRequired: "proxy authentication is required", ErrorRequestTimeout: "request timeout", ErrorConflict: "conflict", } ) func (m *ErrMsg) Error() string { return fmt.Sprintf("err_code: %d, err_msg: %s", m.ErrCode, m.ErrMsg) } func RegisterErrorCode(m map[int32]string) { for k, v := range m { errCodeMap[k] = v } } // GetErrMsgMsg 基于错误码返回错误信息 func GetErrMsgMsg(errCode int32) string { msg, ok := errCodeMap[errCode] if ok { return msg } return UnknownError } // GetErrMsg 基于错误码返回错误信息 func GetErrMsg(errCode int32) *ErrMsg { return &ErrMsg{ErrCode: errCode, ErrMsg: GetErrMsgMsg(errCode)} } // GetErrMsgCode 获取错误码 默认1 业务错误 func GetErrMsgCode(err error) int { if err == nil { return 0 } var p *ErrMsg if errors.As(err, &p) { return int(p.ErrCode) } return 1 } // CreateErrorWithMsg 自定义创建错误 func CreateErrorWithMsg(errCode int32, errMsg string) *ErrMsg { return &ErrMsg{ErrCode: errCode, ErrMsg: errMsg, Autonomy: true} }