Go 标识符和命名规范
标识符
在 Go 语言中,所有由程序员命名的内容都称为标识符。
命名方式
驼峰命名法
Go 语言推荐使用驼峰命名法。当标识符由多个单词组成时,每个单词的首字母都大写,例如 FirstName、LastName。如果标识符是私有的(仅在同一个包内可见),则第一个单词的首字母小写,例如 firstName、lastName。
简短且有意义
Go 语言倡导简洁,但同时也强调可读性。变量、函数和方法的名称应该简短且富有描述性。例如,在不影响理解的情况下,可以使用 req 表示 request,使用 msg 表示 message。
避免冗余
命名时,应避免包名称和标识符重复。例如,对于包 buffer,应将构造函数命名为 New 而不是 NewBuffer,因为调用时使用 buffer.New 已经足够清晰。
使用一致的缩写
对常用的词使用标准的缩写,并保持一致性。例如,使用 HTTP 而不是 HyperTextTransferProtocol,使用 ID 而不是 Identity 或 Identifier。
大小写敏感
Go 语言是大小写敏感的,这意味着 Variable 和 variable 被视为两个不同的标识符。
首字母大写的导出名
在 Go 中,首字母大写的变量或函数是导出的(可以从其他包中访问)。如果不希望外部包访问某个变量或函数,就不要将其首字母大写。
避免使用下划线
在 Go 中,标识符通常不包含下划线。即使在测试用例中,也使用 TestFunctionName 而不是 Test_Function_Name。
专有名词的大写
如果函数名或变量名包含专有名词或缩略词,应将其完整大写。例如,ParseHTML、UserID。在处理缩略词时,建议使用一致的大小写风格,通常将整个缩略词大写。
Go 中的预定义标识符
Go 语言预定义了一些标识符,可在程序中直接使用。
基本类型
- bool, byte, complex64, complex128, error, float32, float64, int, int8, int16, int32, int64, rune, string, uint, uint8, uint16, uint32, uint64, uintptr
常量
- true, false, iota, nil
内建函数
- append, cap, close, complex, copy, delete, imag, len, make, new, panic, print, println, real, recover
特殊标识符
- init, main
命名规范
元素 | 命名规范 | 例子 | 说明 |
---|---|---|---|
项目名 | 简短、小写,清晰、有意义 | myapp,goserver | 避免使用下划线或混合大小写 |
包名 | 小写,单个单词,不使用下划线或混合大小写 | fmt,http,sql | 包名应简洁,反映功能 |
文件名 | 小写,可包含下划线或短划线 | main.go,user_test.go | 不要使用空格,尽量简短描述文件内容 |
变量名 | 驼峰命名法,首字母大小写取决于可见性 | userName,localVar | 公有变量首字母大写,私有变量首字母小写 |
常量名 | 驼峰命名法,首字母大写 | MaxSize,URLProtocol | 常量名通常使用驼峰式,避免全大写加下划线 |
函数名 | 驼峰命名法,首字母大小写取决于可见性 | CalculateTotal,main | 函数名应清晰描述功能,使用动词加名词形式 |
方法名 | 驼峰命名法,首字母大小写取决于可见性 | user.PrintName | 方法名应与接收者类型紧密相关 |
接口名 | 驼峰命名法,通常以 "er" 结尾,首字母大写 | Reader,Writer | 接口名应描述其行为,例如 io.Reader 表示读取功能 |
结构体名 | 驼峰命名法,首字母大写 | AppConfig,UserInfo | 结构体名通常是名词,清晰描述所代表的事物 |