返回顶部
g

golang-namingGo命名规范

Go (Golang) naming conventions — covers packages, constructors, structs, interfaces, constants, enums, errors, booleans, receivers, getters/setters, functional options, acronyms, test functions, and subtest names. Use this skill when writing new Go code, reviewing or refactoring, choosing between naming alternatives (New vs NewTypeName, isConnected vs connected, ErrNotFound vs NotFoundError, StatusReady vs StatusUnknown at iota 0), debating Go package names (utils/helpers anti-patterns), or aski

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.1.1
安全检测
已通过
113
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

golang-naming

社区默认。 若公司技能明确覆盖了 samber/cc-skills-golang@golang-naming 技能,则以公司技能为准。

Go 命名约定

Go 偏好简短、可读的名称。大小写控制可见性——大写表示导出,小写表示未导出。所有标识符必须使用混合大小写(MixedCaps),绝不使用下划线。

清晰胜过巧妙。 — Go 谚语
设计架构,命名组件,记录细节。 — Go 谚语

若要忽略某条规则,只需在代码中添加注释。

快速参考

元素约定示例
小写,单个单词json,http,tabwriter
文件
小写,允许下划线 | user_handler.go | | 导出名称 | 大驼峰命名法 | ReadAll,HTTPClient | | 未导出名称 | 小驼峰命名法 | parseToken,userCount | | 接口 | 方法名 + -er | Reader,Closer,Stringer | | 结构体 | 混合大小写名词 | Request,FileHeader | | 常量 | 混合大小写(非全大写) | MaxRetries,defaultTimeout | | 接收者 | 1-2 个字母缩写 | func (s Server),func (b Buffer) | | 错误变量 | Err 前缀 | ErrNotFound,ErrTimeout | | 错误类型 | Error 后缀 | PathError,SyntaxError | | 构造函数 | New(单一类型)或 NewTypeName(多类型) | ring.New,http.NewRequest | | 布尔字段 | 字段和方法使用 is、has、can 前缀 | isReady,IsConnected() | | 测试函数 | Test + 函数名 | TestParseToken | | 缩写词 | 全大写或全小写 | URL,HTTPServer,xmlParser | | 变体:上下文 | WithContext 后缀 | FetchWithContext,QueryContext | | 变体:原地操作 | In 后缀 | SortIn(),ReverseIn() | | 变体:错误 | Must 前缀 | MustParse(),MustLoadConfig() | | 选项函数 | With + 字段名 | WithPort(),WithLogger() | | 枚举(iota) | 类型名前缀,零值 = 未知 | StatusUnknown 在 0 位置,StatusReady | | 命名返回值 | 描述性,仅用于文档 | (n int, err error) | | 错误字符串 | 全小写(含缩写词),无标点 | image: unknown format,invalid id | | 导入别名 | 简短,仅在冲突时使用 | mrand math/rand,pb app/proto | | 格式化函数 | f 后缀 | Errorf,Wrapf,Logf | | 测试表字段 | got/expected 前缀 | input string,expected int |

混合大小写

所有 Go 标识符必须使用 MixedCaps(或 mixedCaps)。绝不在标识符中使用下划线——唯一的例外是测试函数子用例(TestFoo_InvalidInput)、生成的代码以及操作系统/cgo 互操作。这是有实际意义的,而非装饰性的——Go 的导出机制依赖大小写,且工具链也假定全程使用混合大小写。

go
// ✓ 正确
MaxPacketSize
userCount
parseHTTPResponse

// ✗ 错误——这些约定与 Go 的导出机制和工具链预期冲突
MAXPACKETSIZE // C/Python 风格
maxpacketsize // 蛇形命名法
kMaxBufferSize // 匈牙利命名法

避免重复

Go 的调用点始终包含包名,因此在标识符中重复包名会浪费读者的时间——http.HTTPClient 迫使读者解析两次 HTTP。名称不得重复包名、类型名或周围上下文中已有的信息。

go
// 正确——调用点清晰
http.Client // 而非 http.HTTPClient
json.Decoder // 而非 json.JSONDecoder
user.New() // 而非 user.NewUser()
config.Parse() // 而非 config.ParseConfig()

// 在包 sqldb 中:
type Connection struct{} // 而非 DBConnection——db 已在包名中

// 反重复适用于所有导出类型,而不仅仅是主要结构体:
// 在包 dbpool 中:
type Pool struct{} // 而非 DBPool
type Status struct{} // 而非 PoolStatus——调用者写 dbpool.Status
type Option func(*Pool) // 而非 PoolOption

常被忽略的约定

这些约定是正确的但不明显——它们是命名错误最常见的来源:

构造函数命名: 当包只导出一个主要类型时,构造函数是 New(),而不是 NewTypeName()。这避免了重复——调用者写 apiclient.New() 而非 apiclient.NewClient()。仅当包有多个可构造类型时(如 http.NewRequest、http.NewServeMux),才使用 NewTypeName()。

布尔结构体字段: 未导出的布尔字段必须使用 is/has/can 前缀——isConnected、hasPermission,而不是裸的 connected 或 permission。导出的 getter 保留前缀:IsConnected() bool。这读起来自然像一个问题,并将布尔值与其他类型区分开来。

错误字符串完全小写——包括缩写词。 写 invalid message id 而非 invalid message ID,因为错误字符串经常与其他上下文拼接(fmt.Errorf(parsing token: %w, err)),混合大小写在句子中间看起来很奇怪。哨兵错误应包含包名作为前缀:errors.New(apiclient: not found)。

枚举零值: 始终在 iota 位置 0 放置一个显式的 Unknown/Invalid 哨兵。var s Status 会静默地变成 0——如果它映射到一个真实状态如 StatusReady,代码可能会表现得好像状态是故意选择的,而实际上并非如此。

子测试名称: t.Run() 中的表格驱动测试用例名称应为完全小写的描述性短语:valid id、empty input——而非 valid ID 或 Valid Input。

详细分类

有关完整规则、示例和理由,请参阅:

  • - 包、文件和导入别名 — 包命名(单个单词、小写、无复数)、文件命名约定、导入别名模式(仅在冲突时使用以避免认知负担)以及目录结构。
  • - 变量、布尔值、接收者和缩写词 — 基于作用域的命名(名称长度匹配作用域:3 行循环用 i,包级别用更长的名称)、单字母接收者约定(s 用于 Server)、缩写词大小写(URL 而非 Url,HTTPServer 而非 HttpServer)以及布尔命名模式(isReady、hasPrefix)。
  • - 函数、方法和选项 — Getter/Setter 模式(Go 省略 Get,因此 user.Name() 读起来自然)、构造函数约定(New 或 NewTypeName)、命名返回值(仅用于文档)、格式化函数后缀(Errorf、Wrapf)以及函数选项(WithPort、WithLogger)。
  • - 类型、常量和错误 — 接口命名(Reader、Closer 后缀 -er)、结构体命名(名词、混合大小写)、常量(混合大小写,非全大写)、枚举(类型名前缀如 StatusReady)、哨兵错误(ErrNotFound 变量)、错误类型(PathError 后缀)以及错误消息约定(小写、无标点)。
  • - 测试命名 — 测试函数命名(TestFunctionName)、表格驱动测试字段约定(input、expected)、测试辅助函数命名以及子用例命名模式。

常见错误

错误修正
ALL_CAPS 常量Go 将大小写保留用于可见性,而非强调——使用 MixedCaps(MaxRetries)
GetName() getter
Go 省略 Get

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 golang-naming-1776078910 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 golang-naming-1776078910 技能

通过命令行安装

skillhub install golang-naming-1776078910

下载

⬇ 下载 golang-naming v1.1.1(免费)

文件大小: 21.97 KB | 发布时间: 2026-4-14 14:30

v1.1.1 最新 2026-4-14 14:30
- Added evals/evals.json to support evaluation configurations.
- Updated metadata and version in SKILL.md to 1.1.1.
- Minor documentation adjustments; no breaking or behavioral changes.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部