Documentation
¶
Overview ¶
Package errkind 是业务错误建模库。
设计原则: Identity (Kind) 与 Instance (Error) 分离。
var UserNotFound = errkind.Define(10001, "user_not_found")
return UserNotFound.Wrap(cause,
errkind.Message("用户不存在"),
errkind.With("uid", uid),
)
core 不感知 HTTP / gRPC / OTel / slog 等任何外部协议; 这些扩展位于 ext/* 子包, 通过装饰器 (Decorator) 组合到错误链上, 由 errors.As 自然发现, 不依赖任何 core 内部"槽位"。
文件分布:
- errkind.go 包文档 + 共享小类型 (Code / Attr)
- kind.go Kind 身份对象
- error.go kerr 实例, 含 Format / MarshalJSON
- option.go Option 与内置 Message / With
- registry.go Registry + KindOption + 包级默认 Registry
- extract.go 从 error 链中提取信息的 helper
- stack.go 调用栈 (进程级开关)
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Attr ¶
Attr 是有序键值对; 使用切片而非 map, 保证遍历顺序稳定。
type Code ¶
type Code uint32
Code 是业务错误码的类型。
故意不用 int, 避免与 HTTP / gRPC 状态码、负数语义混淆; uint32 与 grpc/codes.Code 兼容, 与 4 字节序列化也对齐。
type Kind ¶
type Kind struct {
// contains filtered or unexported fields
}
Kind 是错误的"身份"—— code + name 组成的全局单例, 永远不变。
Kind 由 Registry.Define 创建, 不能直接 new; 重复 (code, name) 会 panic。
func Define ¶
func Define(code Code, name string, opts ...KindOption) *Kind
Define 在默认注册中心注册一个 Kind。
func KindOf ¶
KindOf 从 err 链上提取第一个 errkind 错误的 Kind。
注意: 当 err 不是 errkind 错误时返回 nil。 推荐使用 CodeOf / NameOf 这两个 (T, bool) 风格的 helper, 避免空指针解引用:
if c, ok := errkind.CodeOf(err); ok && c == UserNotFound.Code() { ... }
或者显式 nil 判:
if k := errkind.KindOf(err); k != nil && k == UserNotFound { ... }
type KindOption ¶
type KindOption func(*Kind)
KindOption 用于 Define 时配置 Kind 的默认行为。
func DefaultMessage ¶
func DefaultMessage(msg string) KindOption
DefaultMessage 给 Kind 设置默认消息, New / Wrap 未传 Message 时回退。
type Option ¶
type Option func(*kerr)
Option 作用于 errkind 错误实例自身 (message / attrs)。
协议相关扩展 (HTTP / gRPC / ...) 不通过 Option, 而是由 ext 包独立装饰器实现, 这两个机制不混用——避免一个泛槽位变成什么都往里塞的字典。
type Registry ¶
type Registry struct {
// contains filtered or unexported fields
}
Registry 持有一组 Kind, 保证 (code, name) 在自身范围内唯一。
通常使用包级 Define / Kinds / LookupCode / LookupName 即可; 测试或多租户场景可以 NewRegistry() 创建独立注册中心。
func (*Registry) Define ¶
func (r *Registry) Define(code Code, name string, opts ...KindOption) *Kind
Define 注册并返回一个新的 Kind; 重复 code/name 立即 panic。
func (*Registry) LookupCode ¶
LookupCode 按 code 查找; 不存在返回 nil。
func (*Registry) LookupName ¶
LookupName 按 name 查找; 不存在返回 nil。
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
examples
|
|
|
basic
command
演示 errkind 的最小可运行用法。
|
演示 errkind 的最小可运行用法。 |
|
http
command
演示 errkind 在 net/http 服务里如何统一渲染错误响应。
|
演示 errkind 在 net/http 服务里如何统一渲染错误响应。 |
|
ext
|
|
|
grpc
Package grpc 把 gRPC 状态码装饰到错误链上。
|
Package grpc 把 gRPC 状态码装饰到错误链上。 |
|
http
Package http 把 HTTP 状态码装饰到错误链上。
|
Package http 把 HTTP 状态码装饰到错误链上。 |
|
otel
Package otel 提供错误的 telemetry 命名约定 (用于 metrics / tracing 维度切分)。
|
Package otel 提供错误的 telemetry 命名约定 (用于 metrics / tracing 维度切分)。 |
|
slog
Package slog 把 errkind 错误结构化输出到 log/slog。
|
Package slog 把 errkind 错误结构化输出到 log/slog。 |
|
integration
|
|
|
grpc
module
|