go 语言中的 nil 是一个代表引用(切片、映射、通道)、指针、函数、接口 (只有这些没有等) 零值的预定义变量。
- 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
}