• 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

}
posted on 2018-09-06 17:46  scala  阅读(237)  评论(0编辑  收藏  举报