Documentation ¶
Overview ¶
Package errcode 用于定义 HTTP 和 gRPC 错误码,包括系统级别的错误码和业务级别的错误码
Index ¶
- Constants
- Variables
- func GetErrorCode(err error) int
- func GetStatusCode(err error) codes.Code
- func HCode(num int) int
- func ListGRPCErrCodes(w http.ResponseWriter, _ *http.Request)
- func RCode(num int) codes.Code
- func ShowConfig(jsonData []byte) func(w http.ResponseWriter, r *http.Request)
- type Detail
- type ErrInfo
- type Error
- func (e *Error) Code() int
- func (e *Error) Details() []string
- func (e *Error) Err(msg ...string) error
- func (e *Error) ErrToHTTP(msg ...string) error
- func (e *Error) Msg() string
- func (e *Error) NeedHTTPCode() bool
- func (e *Error) RewriteMsg(msg string) *Error
- func (e *Error) ToHTTPCode() int
- func (e *Error) WithDetails(details ...string) *Error
- func (e *Error) WithOutMsg(msg string) *Error
- func (e *Error) WithOutMsgI18n(langMsg map[int]map[string]string, lang string) *Error
- type RPCStatus
- type Responser
Constants ¶
const ToHTTPCodeLabel = "[standard http code]"
ToHTTPCodeLabel 需要转换为标准 HTTP 状态码的标签
Variables ¶
var ( // Success 成功 // 错误码: 0 // 描述: 操作成功 Success = NewError(0, "ok") // InvalidParams 无效参数 // 错误码: 100001 // 描述: 请求参数无效 InvalidParams = NewError(100001, "Invalid Parameter") // 错误码: 100002 // 描述: 用户未被授权访问资源 Unauthorized = NewError(100002, "Unauthorized") // InternalServerError 内部服务器错误 // 错误码: 100003 // 描述: 服务器内部发生错误 InternalServerError = NewError(100003, "Internal Server Error") // NotFound 未找到 // 错误码: 100004 // 描述: 请求的资源未找到 NotFound = NewError(100004, "Not Found") // Timeout 请求超时 // 错误码: 100006 // 描述: 请求超时 Timeout = NewError(100006, "Request Timeout") // TooManyRequests 请求过多 // 错误码: 100007 // 描述: 过多的请求 TooManyRequests = NewError(100007, "Too Many Requests") // Forbidden 禁止访问 // 错误码: 100008 // 描述: 禁止访问资源 Forbidden = NewError(100008, "Forbidden") // LimitExceed 超过限制 // 错误码: 100009 // 描述: 超过了某个限制 LimitExceed = NewError(100009, "Limit Exceed") // DeadlineExceeded 截止时间已过 // 错误码: 100010 // 描述: 操作超过了截止时间 DeadlineExceeded = NewError(100010, "Deadline Exceeded") // AccessDenied 访问被拒绝 // 错误码: 100011 // 描述: 访问被拒绝 AccessDenied = NewError(100011, "Access Denied") // MethodNotAllowed 方法不允许 // 错误码: 100012 // 描述: 请求的方法不被允许 MethodNotAllowed = NewError(100012, "Method Not Allowed") // 错误码: 100013 // 描述: 服务暂时不可用 ServiceUnavailable = NewError(100013, "Service Unavailable") // Canceled 取消 // 错误码: 100014 // 描述: 操作被取消 Canceled = NewError(100014, "Canceled") // Unknown 未知错误 // 错误码: 100015 // 描述: 未知错误 Unknown = NewError(100015, "Unknown") // PermissionDenied 权限拒绝 // 错误码: 100016 // 描述: 没有足够的权限执行操作 PermissionDenied = NewError(100016, "Permission Denied") // ResourceExhausted 资源耗尽 // 错误码: 100017 // 描述: 资源耗尽 ResourceExhausted = NewError(100017, "Resource Exhausted") // FailedPrecondition 前提条件失败 // 错误码: 100018 // 描述: 前提条件失败 FailedPrecondition = NewError(100018, "Failed Precondition") // Aborted 中断 // 错误码: 100019 // 描述: 操作被中断 Aborted = NewError(100019, "Aborted") // OutOfRange 超出范围 // 错误码: 100020 // 描述: 请求的数据超出范围 OutOfRange = NewError(100020, "Out Of Range") // Unimplemented 未实现 // 错误码: 100021 // 描述: 功能未实现 Unimplemented = NewError(100021, "Unimplemented") // DataLoss 数据丢失 // 错误码: 100022 // 描述: 数据丢失 DataLoss = NewError(100022, "Data Loss") // StatusBadGateway 不良网关 // 错误码: 100023 // 描述: 服务器作为网关或代理,从上游服务器收到无效响应 StatusBadGateway = NewError(100023, "Bad Gateway") // AlreadyExists 已存在 // 错误码: 100005 // 描述: 资源已存在 // 注意: 已弃用,建议使用 Conflict 替代 AlreadyExists = NewError(100005, "Already Exists") // Conflict 冲突 // 错误码: 100409 // 描述: 请求冲突 Conflict = NewError(100409, "Conflict") // TooEarly 太早 // 错误码: 100425 // 描述: 请求太早 TooEarly = NewError(100425, "Too Early") )
http系统级别错误码,错误码范围 10000~20000
var ( StatusSuccess = NewRPCStatus(0, "ok") // 操作成功 StatusCanceled = NewRPCStatus(300001, "Canceled") // 操作已取消 StatusUnknown = NewRPCStatus(300002, "Unknown") // 未知错误 StatusInvalidParams = NewRPCStatus(300003, "Invalid Parameter") // 参数无效 StatusDeadlineExceeded = NewRPCStatus(300004, "Deadline Exceeded") // 超时 StatusNotFound = NewRPCStatus(300005, "Not Found") // 未找到 StatusAlreadyExists = NewRPCStatus(300006, "Already Exists") // 已存在 StatusPermissionDenied = NewRPCStatus(300007, "Permission Denied") // 权限被拒绝 StatusResourceExhausted = NewRPCStatus(300008, "Resource Exhausted") // 资源耗尽 StatusFailedPrecondition = NewRPCStatus(300009, "Failed Precondition") // 预先条件失败 StatusAborted = NewRPCStatus(300010, "Aborted") // 操作被中止 StatusOutOfRange = NewRPCStatus(300011, "Out Of Range") // 范围外 StatusUnimplemented = NewRPCStatus(300012, "Unimplemented") // 未实现 StatusInternalServerError = NewRPCStatus(300013, "Internal Server Error") // 内部服务器错误 StatusDataLoss = NewRPCStatus(300015, "Data Loss") // 数据丢失 StatusTimeout = NewRPCStatus(300017, "Request Timeout") // 请求超时 StatusTooManyRequests = NewRPCStatus(300018, "Too Many Requests") // 请求过多 StatusForbidden = NewRPCStatus(300019, "Forbidden") // 禁止访问 StatusLimitExceed = NewRPCStatus(300020, "Limit Exceed") // 超出限制 StatusMethodNotAllowed = NewRPCStatus(300021, "Method Not Allowed") // 方法不允许 StatusAccessDenied = NewRPCStatus(300022, "Access Denied") // 访问被拒绝 StatusConflict = NewRPCStatus(300023, "Conflict") // 冲突 )
rpc system level error code with status prefix, error code range 30000~40000 RPC系统级别错误代码,错误代码范围为30000到40000
var SkipResponse = errors.New("skip response") //nolint
SkipResponse 跳过响应
Functions ¶
func GetErrorCode ¶ added in v1.0.5
GetErrorCode 从 HTTP 调用返回的错误中获取错误码
func GetStatusCode ¶ added in v1.0.5
GetStatusCode 从 gRPC 调用返回的错误中获取状态代码
func HCode ¶
HCode 根据传入的数字生成一个介于 200000 和 300000 之间的错误码
该函数用于生成 HTTP 服务级别的错误码,错误码前缀为 Err,例如:
var (
ErrUserCreate = NewError(HCode(1)+1, "failed to create user") // 200101 ErrUserDelete = NewError(HCode(1)+2, "failed to delete user") // 200102 ErrUserUpdate = NewError(HCode(1)+3, "failed to update user") // 200103 ErrUserGet = NewError(HCode(1)+4, "failed to get user details") // 200104
)
参数: - num: 一个整数,表示错误码的子类别编号,范围必须在 1 到 999 之间。
返回值: - 一个整数,表示生成的错误码。
异常: - 如果 num 不在 1 到 999 的范围内,函数会 panic 并抛出错误信息 "num range must be between 0 to 1000"。
func ListGRPCErrCodes ¶
func ListGRPCErrCodes(w http.ResponseWriter, _ *http.Request)
ListGRPCErrCodes 列出所有 gRPC 错误代码,HTTP 处理函数
func RCode ¶
RCode 生成一个介于 400000 和 500000 之间的错误代码
该函数用于生成服务级别的错误代码,根据传入的数字生成相应的错误代码。 例如:
var ( StatusUserCreate = NewRPCStatus(RCode(1)+1, "failed to create user") // 400101 StatusUserDelete = NewRPCStatus(RCode(1)+2, "failed to delete user") // 400102 StatusUserUpdate = NewRPCStatus(RCode(1)+3, "failed to update user") // 400103 StatusUserGet = NewRPCStatus(RCode(1)+4, "failed to get user details") // 400104 )
参数: - num: 生成错误代码的基础数字,必须在 1 到 999 之间。
返回: - codes.Code: 生成的 gRPC 错误代码。
func ShowConfig ¶
func ShowConfig(jsonData []byte) func(w http.ResponseWriter, r *http.Request)
ShowConfig 显示配置信息 @Summary 显示配置信息 @Description 显示配置信息 @Tags system @Accept json @Produce json @Router /config [get]
Types ¶
type Error ¶
type Error struct {
// contains filtered or unexported fields
}
Error 错误结构体
func (*Error) ErrToHTTP ¶
ErrToHTTP 转换为标准错误并添加 ToHTTPCodeLabel 到错误消息 如果需要转换为标准 HTTP 状态码,可以使用此方法 提示:可以调用 GetErrorCode 函数获取标准 HTTP 状态码
func (*Error) RewriteMsg ¶ added in v1.0.43
RewriteMsg 重写错误消息
func (*Error) WithDetails ¶
WithDetails 添加错误详情
func (*Error) WithOutMsg ¶
WithOutMsg 输出错误消息 已弃用:请使用 RewriteMsg 替代
func (*Error) WithOutMsgI18n ¶
WithOutMsgI18n 输出国际化错误消息 langMsg 示例:
map[int]map[string]string{ 20010: { "en-US": "login failed", "zh-CN": "登录失败", }, }
lang BCP 47 代码 https://learn.microsoft.com/en-us/openspecs/office_standards/ms-oe376/6c085406-a698-4e12-9d4d-c3b0ee3dbc4a
type RPCStatus ¶
type RPCStatus struct {
// contains filtered or unexported fields
}
RPCStatus 用于封装 gRPC 状态
func NewRPCStatus ¶
NewRPCStatus 创建一个新的 gRPC 状态
func (*RPCStatus) ErrToHTTP ¶
ErrToHTTP 将 gRPC 错误转换为标准 HTTP 错误,并添加 ToHTTPCodeLabel 标签 通常用于 HTTP 调用 gRPC API 时 如果有参数 'desc',则替换原始消息