Go语言nil空值

Go语言nil空值教程

Golang数值类型 的零值为 0, 布尔类型 的零值(初始值)为 false,字符串类型 的零值为空字符串 "",而指针、切片、映射、通道、函数 和接口等引用类型的零值则是 nil。

Go语言nil特性

  • nil 标识符是不能比较的
  • nil 不是关键字或保留字
  • 不同类型 nil 的指针是一样的
  • 不同类型的 nil 是不能比较的
  • 两个相同类型的 nil 值也可能无法比较
  • nil 是常见引用类型的零值

案例

nil标识符是不能比较的

nil 标识符是不能比较的,所以我们比较两个 nil,会报错

package main import ( "fmt" ) func main() { fmt.Println("嗨客网(www.haicoder.net)") //nil 标识符是不能比较的,所以我们比较两个 nil,会报错 fmt.Println(nil == nil) }

程序运行后,控制台输出如下:

124 golang空值nil.png

我们将两个 nil 使用 == 进行比较,结果程序报错,说明两个 nil 是不能比较的。

nil不是关键字或保留字

因此 nil 不是关键字或保留字,所以我们可以定义变量名为 nil

package main import ( "fmt" ) func main() { fmt.Println("嗨客网(www.haicoder.net)") //因此 nil 不是关键字或保留字,所以我们可以定义变量名为 nil var nil = 111 fmt.Println("Nil =", nil) }

程序运行后,控制台输出如下:

125 golang空值nil.png

我们将两个 nil 使用 == 进行比较,结果程序报错,说明两个 nil 是不能比较的。

不同类型nil的指针是一样的

不同类型 nil 的指针是一样的,都是 0x0

package main import ( "fmt" ) func main() { fmt.Println("嗨客网(www.haicoder.net)") //不同类型 nil 的指针是一样的,都是 0x00 var arr []int var num *int fmt.Printf("Arr = %p\n", arr) fmt.Printf("Num = %p", num) }

程序运行后,控制台输出如下:

126 golang空值nil.png

我们将两个 nil 使用 == 进行比较,结果程序报错,说明两个 nil 是不能比较的。

不同类型的nil是不能比较的

不同类型的 nil 是不能进行比较的,比较程序会报错

package main import ( "fmt" ) func main() { fmt.Println("嗨客网(www.haicoder.net)") //不同类型的 nil 是不能进行比较的,比较程序会报错 var mapNil map[int]string var intNil *int fmt.Printf(mapNil == intNil) }

程序运行后,控制台输出如下:

127 golang空值nil.png

我们将两个 nil 使用 == 进行比较,结果程序报错,说明两个 nil 是不能比较的。

两个相同类型的nil值也可能无法比较

即使是两个相同类型的 nil 值也可能无法比较

package main import "fmt" func main() { fmt.Println("嗨客网(www.haicoder.net)") //即使是两个相同类型的 nil 值也可能无法比较 var s1 []int var s2 []int fmt.Printf(s1 == s2) }

程序运行后,控制台输出如下:

128 golang空值nil.png

即使是两个相同类型的 nil 值也可能无法比较,比较程序会报错。

nil是常见引用类型的零值

nil 是常见引用类型的零值

package main import "fmt" func main() { fmt.Println("嗨客网(www.haicoder.net)") //nil 是常见引用类型的零值 var m map[int]string var ptr *int var c chan int var sl []int var f func() var i interface{} fmt.Printf("%#v\n", m) fmt.Printf("%#v\n", ptr) fmt.Printf("%#v\n", c) fmt.Printf("%#v\n", sl) fmt.Printf("%#v\n", f) fmt.Printf("%#v\n", i) }

程序运行后,控制台输出如下:

129 golang空值nil.png

nil 是常见引用类型的零值。