在Go语言中,局部变量和全局变量的缺省值是什么?
在Go语言中,当你声明一个变量但没有给它赋值时,这个变量会被自动初始化为其类型的零值。这适用于全局变量和函数内的局部变量。
这是Go语言各种类型的零值:
- 数值类型(
int
,float32
,float64
等)的零值是0
。 - 布尔类型(
bool
)的零值是false
。 - 字符串类型(
string
)的零值是空字符串""
。 - 指针(
*T
)的零值是nil
。 - 切片(
[]T
)的零值是nil
。 - 映射(
map[T]T
)的零值是nil
。 - 函数类型的零值是
nil
。 - 接口类型的零值是
nil
。 - 通道类型(
chan T
)的零值是nil
。 - 数组类型(
[N]T
)的零值是所有元素都为零值的数组。 - 结构体类型(
struct
)的零值是所有字段都为零值的结构体。
以下是一个例子,展示了Go语言的零值:
package main
import "fmt"
var globalInt int
var globalString string
var globalBool bool
func main() {
var localFloat32 float32
var localPointer *int
fmt.Println(globalInt) // 输出:0
fmt.Println(globalString) // 输出:""
fmt.Println(globalBool) // 输出:false
fmt.Println(localFloat32) // 输出:0
fmt.Println(localPointer == nil) // 输出:true
}
在这个例子中,全局变量globalInt
,globalString
和globalBool
,以及局部变量localFloat32
和localPointer
都没有被赋值,所以它们被自动初始化为各自类型的零值。