Documentation
¶
Overview ¶
Package dberr 把数据库驱动错误翻译为 pkg/errors 的 *Status, 让仓储层只抛原生 driver error,中间件/网关层统一拿到带业务码的错误。
错误翻译层:
- 驱动层只产 error,业务层调 Translate(err) 得到带 Code 的 *Status;
- 翻译分两步:Driver.Classify(err) → ErrClass(枚举),再按表映射到 Code;
- ErrClass 是 DB 无关的稳定分类(唯一约束、外键、可空、死锁、超时、连接断开...), 各 driver 适配器各自实现 Classify,业务层只认 ErrClass。
零值不可用,用 New 构造。Translator 与各 Driver 适配器并发安全(只读映射)。
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Driver ¶
Driver 把底层 driver error 归类为 ErrClass。 实现方对接具体驱动(pgx/mysql/go-sql-driver/sqlite...),只暴露这一个方法。
type ErrClass ¶
type ErrClass int
ErrClass 数据库错误的稳定分类(DB 无关)。
const ( ClassUnknown ErrClass = iota // 未能识别 ClassUniqueViolation // 唯一约束冲突(重复键) ClassForeignKeyViolation // 外键约束冲突 ClassNotNullViolation // 非空约束冲突 ClassCheckViolation // check 约束冲突 ClassDeadlock // 死锁/序列化失败 ClassTimeout // 查询超时 ClassConnection // 连接断开/不可达 ClassNotFound // 行不存在(影响 0 行的 NoRows) ClassTooManyRows // 期望单行却返回多行 )
type ErrorIsDriver ¶
type ErrorIsDriver struct {
Rules []ErrorIsRule
}
ErrorIsDriver 用 errors.Is 做归类:适合标准库 database/sql 的 ErrBadConn/ErrTainted 以及 driver 自身导出的哨兵 error。每条规则按顺序匹配,命中即返回。
func (ErrorIsDriver) Classify ¶
func (d ErrorIsDriver) Classify(err error) ErrClass
Classify 按规则顺序匹配第一个命中的 errors.Is。
type ErrorIsRule ¶
ErrorIsRule 一条 errors.Is 归类规则。
type NoopDriver ¶
type NoopDriver struct{}
NoopDriver 把所有错误归为 ClassUnknown。无 DB 依赖时的占位。
func (NoopDriver) Classify ¶
func (NoopDriver) Classify(error) ErrClass
type Translator ¶
type Translator struct {
// contains filtered or unexported fields
}
Translator 把 ErrClass 翻译为 *pkg/errors.Status。
func (*Translator) Class ¶
func (t *Translator) Class(err error) ErrClass
Class 返回 err 的 ErrClass(经 driver 归类)。便于业务层做条件分支。
Click to show internal directories.
Click to hide internal directories.