- go 语言中的 nil 是一个代表引用(切片、映射、通道)、指针、函数、接口 零值的预定义变量。
- 值类型不可能为 nil . 所以数字、结构体、字符串 不可能为空 (不用担心空指针异常了)
- 设置 引用变量 = nil 和声明后未赋值的初始化零值状态是一样的。引用类型 = nil 不是未初始化状态,仍可以调用它们的方法获得有意义的值。
- 指针为 nil 的状态 必须重新指定一个地址,否则不能对 nil 地址位置的值修改操作
- 接口为 nil 的状态 就是一个空接口,函数为 nil 的状态 不能调用 编译可以通过但是会发生运行时错误。
/** // nil is a predeclared identifier representing the zero value for a // pointer, channel, func, interface, map, or slice type. // Type must be a pointer, channel, func, interface, map, or slice type var nil Type */ package main import "fmt" func main() { //引用 <切片、映射、通道> var x map[string]string //显式初始化为 = nil 和声明类型后不明确赋值效果都是一样的 fmt.Println(x) //map[] , x == nil : true var y []int // = nil fmt.Println(y) //[] , x == nil : true //指针 var z *int // = nil fmt.Println(z) //<nil> , x == nil : true //函数 var f func(int) int fmt.Println(f) //<nil> , x == nil : true //接口 var i interface{} fmt.Println(i) //<nil> , x == nil : true }