Golang Naming

Polar Sponsor
爱发电 赞助
.NET 9.0

Go(Golang)命名规范 — 包括包、构造函数、结构体、接口、常量、枚举、错误、布尔值、接收器、getter/setter、函数等。

公司技能明确取代 Samber/ cc- swilling- golang@ golang- 命名技能优先

功能概述

公司技能明确取代 Samber/ cc- swilling- golang@ golang- 命名技能优先是一项面向实际任务的技能,主要用于Go Naming Conventions.;Go favors short, 可读名称.;

核心要点

  • Capitalization.。
  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。

使用与执行

从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。

结果检查与注意事项

执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。

社区默认规范。 若某公司技能明确覆盖 samber/cc-skills-golang@golang-naming 技能,则该技能优先生效。

Go 命名规范

Go 偏好简短、易读的名称。首字母大小写控制可见性:大写表示导出(exported),小写表示未导出(unexported)。所有标识符 必须 使用 MixedCaps 风格,禁止 使用下划线。

“清晰优于巧妙。” — Go 谚语

“设计架构,命名组件,记录细节。” — Go 谚语

如需忽略某条规则,只需在代码中添加注释即可。

速查表

元素 规范 示例
包(Package) 全小写,单个单词 json、http、tabwriter
文件(File) 全小写,允许使用下划线 user_handler.go
导出名称(Exported name) UpperCamelCase ReadAll、HTTPClient
未导出名称(Unexported) lowerCamelCase parseToken、userCount
接口(Interface) 方法名 + -er Reader、Closer、Stringer
结构体(Struct) MixedCaps 名词 Request、FileHeader
常量(Constant) MixedCaps(非 ALL_CAPS) MaxRetries、defaultTimeout
接收者(Receiver) 1–2 字母缩写 func (s *Server)、func (b *Buffer)
错误变量(Error variable) Err 前缀 ErrNotFound、ErrTimeout
错误类型(Error type) Error 后缀 PathError、SyntaxError
构造函数(Constructor) New(单一类型)或 NewTypeName(多类型) ring.New、http.NewRequest
布尔字段(Boolean field) is、has、can 前缀(仅限 字段 和方法) isReady、IsConnected()
测试函数(Test function) Test + 函数名 TestParseToken
缩略词(Acronym) 全大写或全小写 URL、HTTPServer、xmlParser
变体:带上下文(Variant: context) WithContext 后缀 FetchWithContext、QueryContext
变体:原地操作(Variant: in-place) In 后缀 SortIn()、ReverseIn()
变体:错误即 panic(Variant: error) Must 前缀 MustParse()、MustLoadConfig()
选项函数(Option func) With + 字段名 WithPort()、WithLogger()
枚举(Enum,iota) 类型名前缀,零值为 unknown StatusUnknown(值为 0)、StatusReady
具名返回值(Named return) 描述性命名,仅用于文档说明 (n int, err error)
错误字符串(Error string) 全小写(含缩略词),无标点符号 "image: unknown format"、"invalid id"
导入别名(Import alias) 简短,仅在发生冲突时使用 mrand "math/rand"、pb "app/proto"
格式化函数(Format func) f 后缀 Errorf、Wrapf、Logf
测试表字段(Test table fields) got/expected 前缀 input string、expected int

MixedCaps

所有 Go 标识符 必须 使用 MixedCaps(或 mixedCaps)。禁止 在标识符中使用下划线 —— 唯一例外是测试函数子用例(如 TestFoo_InvalidInput)、自动生成代码,以及 OS/cgo 互操作场景。这不是风格偏好,而是核心机制:Go 的导出机制依赖大小写,且整个工具链均假设标识符采用 MixedCaps 风格。

// ✓ 正确
MaxPacketSize
userCount
parseHTTPResponse

// ✗ 错误 —— 这些风格与 Go 的导出机制及工具链预期冲突
MAX_PACKET_SIZE   // C/Python 风格
max_packet_size   // snake_case
kMaxBufferSize    // 匈牙利命名法

避免重复(Stuttering)

Go 的调用点始终包含包名,因此在标识符中重复包名会浪费读者精力 —— 例如 http.HTTPClient 强迫读者两次解析 “HTTP”。标识符 不得 重复已在包名、类型名或上下文中明确的信息。

// 正确 —— 调用点简洁清晰
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)),句中混用大小写显得不协调。哨兵错误(sentinel error)应以包名为前缀:errors.New("apiclient: not found")。

枚举零值: 总是在 iota 索引 0 处显式定义 Unknown/Invalid 哨兵值。声明 var s Status 会静默初始化为 0;若该值映射到真实状态(如 StatusReady),则代码可能误以为状态已被主动选择,而实际只是未初始化。

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

详细分类

完整规则、示例及设计原理,请参阅:

  • 包、文件与导入别名(Packages, Files & Import Aliasing) —— 包命名(单字、小写、无复数)、文件命名规范、导入别名模式(仅在冲突时使用以降低认知负荷)、目录结构。

  • 变量、布尔值、接收者与缩略词(Variables, Booleans, Receivers & Acronyms) —— 基于作用域的命名(长度匹配作用域:3 行循环用 i,包级变量用更长名称)、单字母接收者惯例(s 表示 Server)、缩略词大小写(URL 非 Url,HTTPServer 非 HttpServer)、布尔命名模式(isReady、hasPrefix)。

  • 函数、方法与选项(Functions, Methods & Options) —— Getter/Setter 模式(Go 省略 Get,故 user.Name() 在调用点自然可读)、构造函数规范(New 或 NewTypeName)、具名返回值(仅用于文档说明)、格式化函数后缀(Errorf、Wrapf)、函数式选项(WithPort、WithLogger)。

  • 类型、常量与错误(Types, Constants & Errors) —— 接口命名(Reader、Closer 等带 -er 后缀)、结构体命名(名词,MixedCaps)、常量(MixedCaps,非 ALL_CAPS)、枚举(类型名前缀,如 StatusReady)、哨兵错误(ErrNotFound 变量)、错误类型(PathError 后缀)、错误消息规范(全小写,无标点)。

  • 测试命名(Test Naming) —— 测试函数命名(TestFunctionName)、表格驱动测试字段规范(input、expected)、测试辅助函数命名、子用例命名模式。

常见错误

错误 修正方式
ALL_CAPS 常量 Go 使用大小写表示可见性,而非强调 —— 应使用 MixedCaps(如 MaxRetries)
GetName() Getter Go 省略 Get,因 user.Name() 在调用点自然可读。但布尔谓词仍保留 Is/Has/Can 前缀:IsHealthy() bool,而非 Healthy() bool
Url、Http、Json 缩略词 混合大小写的缩略词易引发歧义(如 HttpsUrl —— 是 Https+Url?)。应统一用全大写或全小写
this 或 self 接收者 Go 方法调用频繁 —— 使用 1–2 字母缩写(如 s 表示 Server)以减少视觉干扰
util、helper 包 此类名称无法传达内容 —— 应使用具体名称,准确描述所封装的抽象
http.HTTPClient 重复 调用点始终包含包名 —— http.Client 可避免重复阅读 “HTTP”
user.NewUser() 构造函数 单一主要类型应使用 New() —— user.New() 避免重复类型名
connected bool 字段 裸露形容词含义模糊 —— 使用 isConnected 使字段读作是非问句
"invalid message ID" 错误 错误字符串必须全小写(含缩略词) —— 应为 "invalid message id"
StatusReady 位于 iota 0 零值应为哨兵值 —— StatusUnknown 设为 0 可捕获未初始化情况
"not found" 错误字符串 哨兵错误应包含包名 —— "mypackage: not found" 明确标识错误来源
userSlice 类型中嵌入实现 类型应表达其承载内容,而非实现细节 —— users 描述其所含内容,而非其实现方式
接收者名称不一致 同一类型的多个方法间切换接收者名称会误导读者 —— 应保持名称统一
snake_case 标识符 下划线违反 Go 的 MixedCaps 规范及工具链预期 —— 应使用 mixedCaps
短作用域使用长名称 名称长度应匹配作用域 —— 3 行循环中 i 即可,userIndex 反成噪音
按值命名常量 值会变化,职责不会 —— DefaultPort 在端口变更后仍有效,Port8080 则失效
FetchCtx() 上下文变体 WithContext 是 Go 标准后缀 —— FetchWithContext() 可被立即识别
sort() 原地操作但无 In 读者默认函数返回新值。SortIn() 明确表明该函数执行原地修改
parse() 出错时 panic MustParse() 明确警告调用方失败将触发 panic —— 意外行为应在名称中体现
混用 With*、Set*、Use* 代码库内应保持一致 —— With* 是 Go 中函数式选项的标准约定
复数包名 Go 规范要求单数形式(如 net/url 非 net/urls)—— 保证导入路径一致性
Wrapf 缺失 f 后缀 f 后缀表明支持格式化字符串语义 —— Wrapf、Errorf 提醒调用方传入格式化参数
不必要的导入别名 别名增加认知负担。仅在冲突时使用别名 —— 如 mrand "math/rand"
概念名称不一致 对同一概念混用 user/account/person,迫使读者追踪同义词 —— 应统一选用一个名称

通过 Linter 强制执行

许多命名规范问题可由 Linter 自动检测,例如:revive、predeclared、misspell、errname。配置与使用方法详见 samber/cc-skills-golang@golang-linter 技能。

交叉引用

  • → 查看 samber/cc-skills-golang@golang-code-style 技能,了解更广泛的格式与风格决策
  • → 查看 samber/cc-skills-golang@golang-structs-interfaces 技能,深入理解接口命名与接收者设计
  • → 查看 samber/cc-skills-golang@golang-linter 技能,了解自动化强制执行方案(revive、predeclared、misspell、errname)

相关专题

更多
GORM框架数据模型设计教程
GORM框架数据模型设计教程

本专题讲解GORM框架数据模型设计方法,涵盖模型定义、字段标签、主键设置、自定义类型、Hook钩子、表名映射、字段映射与自动迁移等内容,帮助开发者掌握GORM框架模型设计技巧,实现数据库结构规范管理。

2026.08.13

300

16

GORM框架数据库操作详解
GORM框架数据库操作详解

本专题围绕GORM框架数据库操作展开,涵盖增删改查、CRUD操作、条件查询、分页排序、批量处理、事务操作及多数据库应用等内容,帮助开发者掌握GORM框架数据操作方法,提升Go语言数据库开发效率。

2026.08.13

200

13

GORM框架安装配置指南
GORM框架安装配置指南

本专题汇总GORM框架安装配置指南,涵盖GORM安装配置、环境搭建、数据库连接、多数据库支持、读写分离、连接池优化、事务处理及项目应用实践,帮助开发者掌握Go语言ORM框架使用方法,实现高效稳定的数据访问与管理。

2026.08.13

260

17

Kubernetes运维优化教程
Kubernetes运维优化教程

本专题总结Kubernetes运维优化实战经验,覆盖性能监控、指标告警、内存泄漏定位、网络延迟排查与成本优化,并演示Go语言性能剖析与调优手段,帮助运维开发协同提升集群与应用的稳定性和资源效率。

2026.08.13

140

14

Kubernetes云原生开发教程
Kubernetes云原生开发教程

本专题围绕Kubernetes云原生开发展开,涵盖Go语言集成、Docker部署、集群管理、微服务架构、client-go开发及CI/CD实践等内容,结合项目案例帮助开发者掌握容器编排、云原生应用开发与Kubernetes企业级实践能力。

2026.08.13

180

14

Kubernetes安装部署教程
Kubernetes安装部署教程

本专题系统整理Kubernetes安装部署全流程,涵盖kubeadm集群搭建、Golang环境配置、二进制部署、网络插件与存储对接,结合Go语言实战演示节点初始化与验证方法,帮助开发者从零搭建稳定可用的Kubernetes集群环境。

2026.08.13

160

14

Go语言微服务熔断降级与限流系统设计
Go语言微服务熔断降级与限流系统设计

本专题聚焦 Go 语言在微服务稳定性建设中的核心技术,讲解熔断机制、限流算法、服务降级策略以及分布式系统保护设计方法。通过实际架构案例,帮助开发者构建具备高可用与自我保护能力的后端服务系统。

2026.06.22

87

18

Go微服务与gRPC高性能通信实战
Go微服务与gRPC高性能通信实战

本专题围绕 Go 语言在微服务架构下的高性能通信实践展开,深入讲解 gRPC 协议、服务注册与发现、负载均衡、拦截器与性能调优策略。通过实战示例,帮助开发者构建高效可靠的分布式后端服务系统。

2026.04.27

718

17

Golang网络编程与高并发服务设计实践
Golang网络编程与高并发服务设计实践

本专题聚焦 Go 语言在高并发网络服务开发中的应用,讲解 TCP/HTTP 协议处理、Goroutine 调度、Channel 并发通信以及服务性能调优策略。通过实践案例,帮助开发者构建高性能、稳定可靠的后端服务系统。

2026.04.13

59

22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程