零值
-
对于值类型:布尔类型为
false, 数值类型为0,字符串为"",数组和结构会递归初始化其元素或字段,即其初始值取决于元素或字段。 -
对于引用类型: 均为
nil,包括指针 pointer,函数 function,接口 interface,切片 slice,管道 channel,映射 map。
nil
空值(nil) :在Go语言中,nil是一个预定义的标识符,用于表示指针、通道(channel)、映射(map)、切片(slice)、函数以及接口类型的“零值”。它相当于这些类型的“无”或“不存在”。例如,一个nil指针不指向任何内存地址,而一个nil通道不连接任何发送者或接收者。
- 初始化未使用的指针或引用类型变量。
- 检查一个变量是否已被初始化或有效。
- 在错误处理中,表示一个操作没有返回错误。
空结构
作用二
使用 chan struct{} 代替 chan bool 在 goroutines 之间传递信号。使用 bool 容易让人不理解该值,true or false,但是使用 chan struct{} 就很清楚,我们不在乎值,只关心发生的事儿,更容易表达清楚一些。
作用一
用来强制使用字段名来初始化结构体,防止未命名的初始化方式。
正常的结构体
type Q struct {
X, Y int
}
// 两种初始化方式都可以
q1 := Q{X: 1, Y: 1} // 推荐:使用字段名
q2 := Q{1, 1} // 不推荐:按位置初始化
添加 _ struct{} 后的结构体
type Q struct {
X, Y int
_ struct{} // 添加这个字段
}
// 现在只能这样初始化
q1 := Q{X: 1, Y: 1} // ✅ 编译通过
// 这样会报错
q2 := Q{1, 1} // ❌ 编译错误:too few values in struct initializer