Go 命名规范指南
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_e9dbfbbf/sbr-go-dependency-injection。
技能介绍
你在命名上卡在哪
Go 里可见性靠首字母大小写、标识符一律 MixedCaps,这和 Java/C 的 snake_case、全大写常量习惯冲突。调用点总会带上包名,若再写出 http.HTTPClient 或 user.NewUser(),读者要在同一屏里重复解析同一段信息。错误文案、布尔字段、iota 枚举的零值若命名随意,还会在 fmt.Errorf 拼接、未初始化结构体等场景里悄悄埋坑。
技能如何组织内容
本技能把命名当成可执行的约定表,而不是风格偏好:
- 速查表:包、文件、导出/未导出标识符、接口
-er、接收者缩写、Err/Error、构造器NewvsNewTypeName、WithContext/In/Must等变体,一行对照示例。 - MixedCaps 与防 stutter:说明为何下划线与工具链、导出机制冲突;强调标识符不要重复包名或类型名里已有的信息。
- 常被漏掉的细节:单主类型用
New();未导出布尔字段用is/has/can;错误字符串全小写(含缩写);枚举零位放Unknown;子测试名用小写短语。 - 误区对照表:从
ALL_CAPS常量、GetName()、缩写大小写混用,到util包名、接收者名不一致等,逐项给出改法。 - 与 linter 衔接:指向
revive、errname等可自动拦截的问题,并交叉引用更广的 code style、interface、lint 技能。
需要忽略某条规则时,技能也说明可在代码旁用注释标明例外(含测试子用例、生成代码、cgo 等边界)。
适用边界
内容聚焦命名与标识符语义,不覆盖依赖注入、架构分层或完整 formatting 规范(后者见 golang-code-style)。社区默认说明:若组织内有显式覆盖 golang-naming 的公司技能,以公司技能为准。
使用场景
- 接手遗留 Go 服务时,要把 `snake_case` 字段和 `GetXxx` 方法统一改成符合导出规则的 MixedCaps 命名
- 在写 table-driven 测试时,需要统一 `Test` 函数名、`t.Run` 子用例短语以及 `got`/`expected` 字段命名
- 设计新包 API 时,要在单主类型用 `New()`、多类型用 `NewRequest` 这类构造器之间选对,避免 `http.HTTPClient` 式重复
- 配置 revive、errname 等 linter 前,先对照技能里的错误变量、`Err` 前缀与全小写 error string 规则定团队 checklist
适合人员
- 维护公司内部 Go 公共库、需要把接口 `-er` 命名和 functional option 的 `With*` 写法写成一致规范的库作者
- 负责 Go 代码评审的工程师,要快速指出 ALL_CAPS 常量、枚举零值未设 `Unknown`、以及错误串里缩写未小写等问题
- 从 Java/Python 转入 Go 的后端开发,习惯下划线和 `GetName()`,需要在首版 PR 前按技能速查表改标识符
- 要为多个微服务统一测试与子包目录命名、并和 golang-code-style / golang-lint 技能交叉引用的 Tech Lead