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,并且可以简化代码的实现。