Go 语言中有一个比较特殊的概念叫做“零值”(zero value),指的是当一个变量被声明但未被赋值时,它的默认值就是其类型的零值。
Go 语言中的每种数据类型都有其对应的零值,如下所示:
n
var n int
n
另外,对于一些复杂的数据类型(比如结构体、数组等),它们的零值通常是该类型的所有元素都被设置为其对应类型的零值,例如:
type Person struct {
Name string
Age int
Address string
}
var p Person
pPersonNameAgeAddress
bug
零值可以用于多种场景,以下是其中的几个
1 初始化变量
当声明一个变量并且没有给它赋值时,它的值就是该类型的零值,可以用它来初始化变量,例如:
var count int // 初始化为 int 的零值 0
var name string // 初始化为 string 的零值 ""
2 值比较
当需要比较变量的值时,可以将其与对应类型的零值进行比较,例如:
var count int = 5
if count == 0 {
fmt.Println("count is zero")
} else {
fmt.Println("count is non-zero")
}
3 清空变量
有时候需要清空一个变量,可以将其赋值为对应类型的零值,例如:
var name string = "John"
name = "" // 将 name 清空为 string 的零值 ""
4 初始化数据结构
在定义复合数据类型时,可以使用对应类型的零值来初始化,例如:
type Person struct {
Name string
Age int
Address string
}
var p Person // 初始化为 Person 的零值,即 Name 为 "",Age 为 0,Address 为 ""
总的来说,Go 的零值是一个很方便的特性,可以避免一些潜在的 bug,并且可以简化代码的实现。