apperr

package
v1.48.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 16, 2026 License: MIT Imports: 3 Imported by: 0

Documentation

Overview

Package apperr 定义统一业务错误:HTTP 状态 + 业务码 + 消息 + 原始错误链。 业务码遵循阿里巴巴《Java开发手册(泰山版)》A/B/C 三级错误码体系(见 codes.go)。 与 webiris.OK/Fail 配合,业务代码返回 apperr.Error,由中间件统一转响应。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func HTTPStatus added in v1.9.0

func HTTPStatus(code Code) int

HTTPStatus 返回错误码对应的默认 HTTP 状态;未注册时返回 500。

func Is

func Is(err error, code Code) bool

Is 判断错误链中是否存在指定业务码的错误。

Types

type Code

type Code string

Code 是业务错误码(手册 A/B/C 分级,如 "A0400" 参数错误、"B0001" 系统错误)。

const (
	// CodeUserError 用户端错误(一级)。
	CodeUserError Code = "A0001"
	// CodeUserRegisterError 用户注册错误。
	CodeUserRegisterError Code = "A0100"
	// CodeUserNameInvalid 用户名校验失败。
	CodeUserNameInvalid Code = "A0110"
	// CodeUserNameExists 用户名已存在。
	CodeUserNameExists Code = "A0111"
	// CodePasswordInvalid 密码校验失败。
	CodePasswordInvalid Code = "A0120"
	// CodeVerifyCodeInvalid 校验码输入错误。
	CodeVerifyCodeInvalid Code = "A0130"
	// CodeUserInfoInvalid 用户基本信息校验失败。
	CodeUserInfoInvalid Code = "A0150"
	// CodePhoneFormatInvalid 手机格式校验失败。
	CodePhoneFormatInvalid Code = "A0151"
	// CodeEmailFormatInvalid 邮箱格式校验失败。
	CodeEmailFormatInvalid Code = "A0153"
	// CodeUserLoginError 用户登录异常。
	CodeUserLoginError Code = "A0200"
	// CodeUserAccountNotExists 用户账户不存在。
	CodeUserAccountNotExists Code = "A0201"
	// CodeUserAccountFrozen 用户账户被冻结。
	CodeUserAccountFrozen Code = "A0202"
	// CodeUserPasswordWrong 用户密码错误。
	CodeUserPasswordWrong Code = "A0210"
	// CodeUserLoginExpired 用户登录已过期。
	CodeUserLoginExpired Code = "A0230"
	// CodeUserVerifyCodeWrong 用户验证码错误。
	CodeUserVerifyCodeWrong Code = "A0240"
	// CodeAccessPermissionError 访问权限异常。
	CodeAccessPermissionError Code = "A0300"
	// CodeAccessUnauthorized 访问未授权。
	CodeAccessUnauthorized Code = "A0301"
	// CodeAPINoPermission 无权限使用 API。
	CodeAPINoPermission Code = "A0312"
	// CodeUserAccessBlocked 用户访问被拦截。
	CodeUserAccessBlocked Code = "A0320"
	// CodeUserSignatureError 用户签名异常。
	CodeUserSignatureError Code = "A0340"
	// CodeRSASignatureError RSA 签名错误。
	CodeRSASignatureError Code = "A0341"
	// CodeRequestParamError 用户请求参数错误。
	CodeRequestParamError Code = "A0400"
	// CodeInvalidUserInput 无效的用户输入。
	CodeInvalidUserInput Code = "A0402"
	// CodeRequiredParamEmpty 请求必填参数为空。
	CodeRequiredParamEmpty Code = "A0410"
	// CodeParamOutOfRange 请求参数值超出允许的范围。
	CodeParamOutOfRange Code = "A0420"
	// CodeParamFormatMismatch 参数格式不匹配。
	CodeParamFormatMismatch Code = "A0421"
	// CodeAmountExceedsLimit 金额超出限制。
	CodeAmountExceedsLimit Code = "A0424"
	// CodeJSONParseFailed 请求 JSON 解析失败。
	CodeJSONParseFailed Code = "A0427"
	// CodeUserOperationError 用户操作异常。
	CodeUserOperationError Code = "A0440"
	// CodeRequestServiceError 用户请求服务异常。
	CodeRequestServiceError Code = "A0500"
	// CodeRequestRateLimited 请求次数超出限制。
	CodeRequestRateLimited Code = "A0501"
	// CodeRequestConcurrencyLimited 请求并发数超出限制。
	CodeRequestConcurrencyLimited Code = "A0502"
	// CodeDuplicateRequest 用户重复请求。
	CodeDuplicateRequest Code = "A0506"
	// CodeUploadFileError 用户上传文件异常。
	CodeUploadFileError Code = "A0700"
	// CodeUploadFileTypeMismatch 用户上传文件类型不匹配。
	CodeUploadFileTypeMismatch Code = "A0701"
	// CodeUploadFileTooLarge 用户上传文件太大。
	CodeUploadFileTooLarge Code = "A0702"
)
const (
	// CodeSystemError 系统执行出错(一级)。
	CodeSystemError Code = "B0001"
	// CodeSystemTimeout 系统执行超时。
	CodeSystemTimeout Code = "B0100"
	// CodeSystemDisasterTriggered 系统容灾功能被触发。
	CodeSystemDisasterTriggered Code = "B0200"
	// CodeSystemRateLimited 系统限流。
	CodeSystemRateLimited Code = "B0210"
	// CodeSystemDegraded 系统功能降级。
	CodeSystemDegraded Code = "B0220"
	// CodeSystemResourceError 系统资源异常。
	CodeSystemResourceError Code = "B0300"
	// CodeSystemResourceExhausted 系统资源耗尽。
	CodeSystemResourceExhausted Code = "B0310"
	// CodeConnectionPoolExhausted 系统连接池耗尽。
	CodeConnectionPoolExhausted Code = "B0314"
	// CodeThreadPoolExhausted 系统线程池耗尽。
	CodeThreadPoolExhausted Code = "B0315"
)
const (
	// CodeThirdPartyError 调用第三方服务出错(一级)。
	CodeThirdPartyError Code = "C0001"
	// CodeMiddlewareError 中间件服务出错。
	CodeMiddlewareError Code = "C0100"
	// CodeMessageServiceError 消息服务出错。
	CodeMessageServiceError Code = "C0120"
	// CodeMessagePublishFailed 消息投递出错。
	CodeMessagePublishFailed Code = "C0121"
	// CodeMessageConsumeFailed 消息消费出错。
	CodeMessageConsumeFailed Code = "C0122"
	// CodeCacheServiceError 缓存服务出错。
	CodeCacheServiceError Code = "C0130"
	// CodeConfigServiceError 配置服务出错。
	CodeConfigServiceError Code = "C0140"
	// CodeThirdPartyTimeout 第三方系统执行超时。
	CodeThirdPartyTimeout Code = "C0200"
	// CodeDatabaseTimeout 数据库服务超时。
	CodeDatabaseTimeout Code = "C0250"
	// CodeDatabaseError 数据库服务出错。
	CodeDatabaseError Code = "C0300"
	// CodeTableNotExists 表不存在。
	CodeTableNotExists Code = "C0311"
	// CodePrimaryKeyConflict 主键冲突。
	CodePrimaryKeyConflict Code = "C0341"
	// CodeNotifyServiceError 通知服务出错。
	CodeNotifyServiceError Code = "C0500"
	// CodeMailNotifyFailed 邮件提醒服务失败。
	CodeMailNotifyFailed Code = "C0503"
)
const (
	// CodeOK 一切正常(手册:00000)。
	CodeOK Code = "00000"
)

type Error

type Error struct {
	HTTPStatus int
	Code       Code
	Message    string
	Cause      error
}

Error 是统一业务错误。 Message 会直接暴露给调用方,不得包含敏感信息;原始错误通过 Cause 保留在服务端日志。

func From

func From(err error) *Error

From 把任意 error 转换为 *Error: 已是 *Error 时原样返回;其他错误转换为 B0001 系统错误(服务端应记录 Cause)。

func New

func New(code Code, message string) *Error

New 创建业务错误(无原始错误);HTTP 状态按错误码默认映射。

func NewWithStatus added in v1.9.0

func NewWithStatus(httpStatus int, code Code, message string) *Error

NewWithStatus 创建业务错误并显式指定 HTTP 状态。

func Newf

func Newf(code Code, format string, args ...interface{}) *Error

Newf 创建带格式化消息的业务错误。

func Wrap

func Wrap(err error, code Code, message string) *Error

Wrap 包装原始错误为业务错误;原始错误不出现在 Message 中。

func WrapWithStatus added in v1.9.0

func WrapWithStatus(err error, httpStatus int, code Code, message string) *Error

WrapWithStatus 包装原始错误并显式指定 HTTP 状态。

func (*Error) Error

func (e *Error) Error() string

Error 实现 error 接口。

func (*Error) Unwrap

func (e *Error) Unwrap() error

Unwrap 支持 errors.Is/As 定位原始错误。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL