Golang 标识符、关键字与命名规范
一、标识符和关键字
1. 标识符
标识符是 Golang 中对象的名字,其规则如下:
- 组成:由数字、字母和下划线组成(例如
adc123_);只能以字母和下划线开头(例如abc123、_abc123);且区分大小写。 - 预定义标识符:共 36 个,包含基础数据类型(如
int、string)和内置函数(如len、append)等。
关键字以下按类型分类:
(1)常量(4个)
true // 布尔真
false // 布尔假
iota // 常量计数器(从0开始递增)
nil // 空值(指针、切片、映射、通道、函数、接口的零值)
(2)基础类型(20个)
// 整数类型
int int8 int16 int32 int64
// 无符号整数,用于存储指针地址
uint uint8 uint16 uint32 uint64 uintptr
// 浮点/复数类型
float32 float64 complex64 complex128
// 基础类型
bool // 布尔型
byte // 等价于uint8
rune // 等价于int32,代表Unicode码点
string // 字符串
error // 错误接口类型
(3)内置函数(12个)
// 内存/数据结构相关
make // 创建切片、映射、通道(返回实例)
new // 分配内存(返回指针)
append // 切片追加元素
cap // 获取容量(切片、通道)
close // 关闭通道
copy // 复制切片/数组
delete // 删除映射元素
len // 获取长度(字符串、数组、切片、映射、通道)
// 错误/调试相关
panic // 触发恐慌(中断程序)
recover // 恢复恐慌(仅在defer中有效)
print // 底层打印(不推荐,用fmt包)
println // 底层打印并换行(不推荐,用fmt包)
// 复数相关
complex // 创建复数
real // 获取复数实部
imag // 获取复数虚部
2. 关键字
Golang 有 25 个关键字,构成了语言的基础语法结构,涵盖基本控制结构(如 if、for)、数据类型(如 struct、interface)、类型声明(如 type、func)等。
以下按用途分类整理,方便记忆:
| 分类 | 关键字列表 |
|---|---|
| 声明类 | var(变量)、const(常量)、type(类型定义)、func(函数)、package(包)、import(导入) |
| 流程控制类 | if、else、switch、case、default、for、break、continue、goto、fallthrough、return |
| 结构/数据类 | struct(结构体)、interface(接口)、map(映射)、chan(通道)、range(遍历) |
| 并发类 | go(协程)、select(多路复用) |
| 错误处理类 | defer(延迟执行)、panic(主动触发恐慌)、recover(恢复恐慌) |
二、命名规则
1. 区分大小写与访问权限
- 对外暴露的名字(可被外部包使用)必须以大写字母开头(类似面向对象中的
public,需先导入对应包)。 - 私有名字(仅包内可见)以小写字母开头。
2. 包名称
- 包名需与目录名保持一致,应简短、有意义,且不与标准库冲突。
- 包名应为小写单词,不使用下划线或混合大小写。
3. 文件命名
- 采用小写单词,使用下划线分隔,需简短、有意义(例如
customer_dao.go)。
4. 结构体命名
- 遵循驼峰命名法,首字母根据访问权限控制(大写导出,小写私有)。
- 声明和初始化需采用多行格式,示例如下:
type CustomerOrder struct {
Name string
Address string
}
order := CustomerOrder{
Name: "tom",
Address: "海淀",
}
5. 接口命名
- 基本规则与结构体一致。
- 单个函数的接口名以 “er” 作为后缀(例如
Reader、Writer),示例如下:
type Reader interface {
Read(p []byte) (n int, err error)
}
6. 变量命名
- 遵循驼峰命名法。
- 若变量为私有且首个单词是特有名词,特有名词需小写(例如
appService)。 - 布尔类型变量应以
Has、Is、Can或Allow开头,示例如下:
var isExist bool
var hasConflict bool
var canManage bool
var allowGitHook bool
7. 常量命名
- 常量需用全部大写字母组成,使用下划线分词,示例如下:
const APP_URL = "https://www.baidu.com"
- 枚举类型常量需先创建对应类型,示例如下:
type Scheme string
const (
HTTP Scheme = "http"
HTTPS Scheme = "https"
)
三、错误处理
- 不得丢弃任何有
err返回的调用,禁止用_忽略,必须全部处理。 - 接收到错误时,要么返回
err,要么记录日志后尽早return;尽量不使用panic,除非明确其影响。 - 错误描述若为英文,需小写且无标点结尾,建议采用独立错误流处理。
- 正确写法示例:
if err != nil {
// 错误处理
return // 或继续处理
}
// 正常代码
- 错误写法示例(不推荐):
if err != nil {
// 错误处理
} else {
// 正常代码
}
四、单元测试
- 单元测试文件命名规范为
example_test.go。 - 测试用例函数名必须以
Test开头(例如TestExample)。 - 每个重要函数都应编写测试用例,且测试用例需与正常代码一同提交,方便回归测试。