其他
在命名 Go 包、类型、函数、变量、常量或接收者时,用符合…
适用于任何 Go 代码中新建或重命名包、接口、类型、函数、方法、变量、常量、接收者的场景,确保命名地道、清晰且不重复上下文。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 48/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 55/100 ×0.15
适用场景
在命名 Go 包、类型、函数、变量、常量通用
解决思路
- 按资源路由:需要检查 SCREAMING_SNAKE_CASE 常量、Get 前缀 getter、泛化包名,或 this/self 接收者时,运行 `bash scripts/check-naming.sh`。
- 选择 initialisms、导出标识符或包级符号名称时,查阅 `references/IDENTIFIERS.md`。
- 当名称重复包、接收者、类型或局部上下文时,查阅 `references/REPETITION.md`。
- 选择局部变量名、接收者名或循环标识符时,查阅 `references/VARIABLES.md`。
- 命名时先自检:名称使用时是否显得重复;是否利用上下文;是否重复了已经明确的概念。
- 所有 Go 标识符必须使用 MixedCaps;仅测试函数(如 `TestFoo_InvalidInput`)、生成代码、OS/cgo 互操作允许下划线。
- 包名:全部小写、无下划线,使用简短、小写、单数名词;避免 `util`、`common`、`helper`,用更具体的 `stringutil`、`httpauth`、`configloader`。
- 接口名:单方法接口用方法名加 `-er` 后缀,如 `Reader`、`Writer`、`Formatter`;遵循标准方法名(`Read`、`Write`、`Close`、`String`)及其签名。
- 接收者名:用类型的一到两个字母缩写,如 `func (c *Client) Connect()`,所有方法保持一致;绝不使用 `this` 或 `self`。
- 常量名:用 MixedCaps,绝不用 ALL_CAPS 或 K 前缀;按角色而非值命名,如 `MaxRetries` 不是 `Three`,`DefaultPort` 不是 `Port8080`。
- 首字母缩写/缩写词:保持大小写一致,全大写或全小写,如 `HTTPClient`、`userID`、`ParseURL()`,不要 `HttpClient`、`orderId`、`ParseUrl()`。
- 函数和方法名:简单访问器不要 `Get` 前缀;字段 `owner` 的 getter 是 `Owner()`,setter 是 `SetOwner()`;昂贵操作用 `Compute` 或 `Fetch`。
- 函数仅因类型不同时,把类型放在末尾:`ParseInt()`、`ParseInt64()`。
- 变量名:长度与作用域距离成正比;极小作用域(1-7 行)用单字母如 `i`、`n`、`r`;中等作用域用短词如 `count`、`buf`;包级/广泛作用域用描述性名称如 `userAccountCount`。
- 变量名使用熟悉的单字母约定,如索引用 `i`,reader/writer 用 `r`/`w`。
- 变量名避免包含类型,如 `users` 不是 `userSlice`,`name` 不是 `nameString`。
- 未导出全局变量/常量用 `_` 前缀,如 `_defaultPort`,防止遮蔽。
- 避免重复:包 + 符号,如 `widget.New()` 不是 `widget.NewWidget()`。
- 避免重复:接收者 + 方法,如 `p.Name()` 不是 `p.ProjectName()`。
- 避免重复:上下文 + 类型,如在 `sqldb` 包中用 `Connection` 不是 `DBConnection`。
- 不要遮蔽 Go 预声明标识符(`error`、`string`、`len`、`cap`、`append`、`copy`、`new`、`make` 等)作为变量、参数或类型名;需要细节看 `go-declarations` 的 “Avoid Using Built-In Names”。
- 快速参考核对:包 lowercase/no underscores;导出 MixedCaps 大写开头;未导出 mixedCaps 小写开头;接收者 1-2 字母;常量 MixedCaps 非 ALL_CAPS;initialism 一致大小写;变量长度随作用域;不遮蔽内置名。
- 重命名标识符后,运行 `bash scripts/check-naming.sh` 验证没有命名反模式残留。
- 然后运行 `go build ./...` 确认重命名没有破坏构建。
- 遇到接口命名时查阅 `go-interfaces`;包命名/避免 `util`/`common`/导入冲突时查阅 `go-packages`;sentinel errors(`ErrFoo`)/自定义错误类型时查阅 `go-error-handling`;变量名长度依赖作用域或避免内置遮蔽时查阅 `go-declarations`;平衡清晰与简洁时查阅 `go-style-core`。
适用边界 · 注意事项
- 不覆盖包的组织、目录结构或模块布局,这类问题应查阅 `go-packages`。
- 不专门解决错误命名(如 sentinel errors `ErrFoo`、自定义错误类型)、接口设计等主题,应跳转到对应技能。
- 不适用于非 Go 标识符命名,也不替代 `gofmt`、`go vet` 或构建问题排查。