Golang 标识符、关键字与命名规范

一、标识符和关键字

1. 标识符

标识符是 Golang 中对象的名字,其规则如下:

  • 组成:由数字、字母和下划线组成(例如 adc123_);只能以字母和下划线开头(例如 abc123_abc123);且区分大小写。
  • 预定义标识符:共 36 个,包含基础数据类型(如 intstring)和内置函数(如 lenappend)等。

关键字以下按类型分类:

(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 个关键字,构成了语言的基础语法结构,涵盖基本控制结构(如 iffor)、数据类型(如 structinterface)、类型声明(如 typefunc)等。

以下按用途分类整理,方便记忆:

分类 关键字列表
声明类 var(变量)、const(常量)、type(类型定义)、func(函数)、package(包)、import(导入)
流程控制类 ifelseswitchcasedefaultforbreakcontinuegotofallthroughreturn
结构/数据类 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” 作为后缀(例如 ReaderWriter),示例如下:
type Reader interface {
    Read(p []byte) (n int, err error)
}

6. 变量命名

  • 遵循驼峰命名法。
  • 若变量为私有且首个单词是特有名词,特有名词需小写(例如 appService)。
  • 布尔类型变量应以 HasIsCanAllow 开头,示例如下:
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)。
  • 每个重要函数都应编写测试用例,且测试用例需与正常代码一同提交,方便回归测试。