serr

为Go语言错误添加结构化属性,便于追踪和记录。

安装使用

复制下面这段提示词发给你的 AI(Claude / Cursor / TRAE / Codex / WorkBuddy 等),它会自动帮你完成安装:

帮我安装这个 AI Skill:serr。
它的用途是:为Go语言错误添加结构化属性,便于追踪和记录。
完整的 Skill 内容见:https://321skill.com/skills/serr/raw/index.md
请读取该页面内容,如果是 SKILL.md 格式直接安装,如果是 README 提炼核心 prompt 后安装。

提示词包含完整的 Skill 内容链接,AI 读取后即可完成安装。你也可以 查看完整内容 确认无误。

使用示例

“我在Go项目里用`serr.Wrap`包装了一个数据库查询错误,并附加了`query_id`和`user_id`,但日志里看不到这些字段,怎么办?” 它会检查你是否使用了支持的结构化日志库(如配套的logger),并建议你使用`logger.LogErr`来记录错误,这样所有附加属性都会自动以键值对形式输出到日志中。

介绍

SErr是一个Go语言的结构化错误处理包,它解决了传统Go错误信息过于简单、难以追踪上下文的问题。当错误在调用栈中向上传递时,SErr允许开发者在每个栈帧处为错误添加自定义的键值对属性(如用户ID、请求参数等),而无需在每个层级都进行日志记录。

使用时,开发者只需通过serr.Wrap函数包装原始错误,并可以附加自定义消息和任意数量的属性键值对。包装后的错误可以调用serr.StringFromErr获得格式化的字符串输出,或者直接传递给支持结构化输出的日志库(如配套的logger包),后者会自动提取并记录所有附加的属性。

这个Skill非常适合需要精细化错误追踪和调试的Go后端开发、全栈开发和运维工程师。在微服务、分布式系统或复杂的业务逻辑中,它能帮助快速定位错误发生的具体上下文,极大提升排查效率。

建议在项目早期引入,统一错误包装规范。注意,它主要增强错误信息的丰富性,本身不替代错误处理逻辑。对于性能极其敏感或错误信息极为简单的场景,需评估其额外开销是否必要。

核心特点

与标准库`errors`或`fmt.Errorf`仅包装字符串不同,SErr能在包装错误时附加任意结构化数据(键值对),并与结构化日志库(如配套的logger)深度集成,实现错误属性的一键式记录,无需手动拼接日志字段。

注意事项

不适合对性能开销极其敏感或仅需最简单错误传递的场景,其结构化特性会带来轻微的性能和内存开销。

常见问题

SErr和pkg/errors有什么区别?

pkg/errors主要提供堆栈追踪,SErr核心是附加结构化属性,并能与结构化日志无缝集成。

如何记录SErr包装的错误?

推荐使用配套的`github.com/rohanthewiz/logger`库的`LogErr`方法,它能自动提取所有附加属性并结构化输出。

给 AI 助手的安装指引

如果你的 AI 编程助手(Claude Code、Cursor、TRAE 等)能看到这个页面,把下面这段发给它即可自动完成安装:

请访问 https://321skill.com/skills/serr/raw/index.md 读取 serr 的原始 Skill 定义(Markdown 格式),按其中说明在我的环境里完成安装和配置。