Go 惯用法指南
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/golang-idioms-lr-ao90。
技能介绍
解决的问题
Go 代码常见分歧不是语法,而是约定:错误如何包装、日志在哪个层处理、接口应定义在使用方还是实现方、goroutine 与 channel 是否形成可取消、可关闭、可等待的协作结构。对中小模块来说,这些细节会让调用方难以判断错误语义,也会让测试和重构成本上升。
技能如何工作
该技能提供一组 Go 惯用法规则,可用作代码审查提示、生成约束或工程规范:
- 错误处理:用
fmt.Errorf("context: %w", err)增加上下文,并用%w保留errors.Is/errors.As可判定性;对预期条件使用 sentinel errors;同一错误不要既打日志又继续返回。 - 接口设计:优先在 consumer side 定义接口,倾向小而可组合的接口;复用
io.Reader、io.Writer、fmt.Stringer;单方法接口按方法名加er后缀命名。 - 并发模式:围绕 worker pool、channel 方向等模式约束
goroutine与channel的使用,例如jobs <-chan Job这类输入通道语义。
适用边界
适合 Go 服务、CLI、内部框架等在 review 或代码生成阶段需要统一风格的项目。它不替代项目架构决策;对于已有历史错误码、业务接口或遗留并发模型,应结合团队规范裁剪,避免把通用惯用法直接套到性能敏感路径。
使用场景
- 在 Go 服务代码评审中,检查错误是否用 `fmt.Errorf` 加上下文并用 `%w` 包装。
- 设计内部模块接口时,判断接口是否定义在使用方,并保持方法数少、可组合。
- 实现 worker pool 时,检查 goroutine 与 channel 方向是否表达输入、输出和取消语义。
- 为 CLI 工具生成代码时,约束错误返回与日志边界,避免同一错误既记录又返回。
适合人员
- 负责 Go 服务代码评审的后端工程师:希望统一错误包装、接口位置和并发边界。
- 使用 LLM 生成 Go 模块的工程师:希望给提示词加入惯用法约束,减少低质量样板代码。
- 维护内部 SDK 的架构师:希望把 `errors.Is`、接口拆分和 channel 语义写进团队规范。
- 带新人的技术负责人:希望在 PR 检查时快速指出错误处理与 goroutine 使用问题。