Go语言nil特性

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

类型默认值

  • 数值类型 的零值为 0,
  • 布尔类型 的零值(初始值)为 false,
  • 字符串类型 的零值为空字符串 “”,
  • 指针、切片、映射、通道、函数 和接口等引用类型的零值则是 nil
  1. package main
  2. import "fmt"
  3. func main() {
  4. // 基础类型
  5. var num int
  6. var str string
  7. var b bool
  8. //nil 是常见引用类型的零值
  9. var m map[int]string
  10. var ptr *int
  11. var c chan int
  12. var sl []int
  13. var f func()
  14. var i interface{}
  15. fmt.Printf("%#v\n", num)
  16. fmt.Printf("%#v\n", str)
  17. fmt.Printf("%#v\n", b)
  18. fmt.Printf("%#v\n", m)
  19. fmt.Printf("%#v\n", ptr)
  20. fmt.Printf("%#v\n", c)
  21. fmt.Printf("%#v\n", sl)
  22. fmt.Printf("%#v\n", f)
  23. fmt.Printf("%#v\n", i)
  24. /**
  25. 0
  26. ""
  27. false
  28. map[int]string(nil)
  29. (*int)(nil)
  30. (chan int)(nil)
  31. []int(nil)
  32. (func())(nil)
  33. <nil>
  34. */
  35. }