go语言之nil
source link: https://blog.51cto.com/u_3764469/5706856
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
go语言之nil
精选 原创在go语言中,nil是一个零值,如果我们在声明整数的时候没有为变量赋值,那么该整数的值默认是0,如果是一个指针没有明确的指向,它的值就是nil,除了指针,nil还标识切片、映射和接口的零值。
如果对一个指针进行解引用程序会崩溃
fmt.Println(*abc)
为了避免程序崩溃,需要通过对nil判断进行避免
fmt.Println(*abc)
}
当变量被声明为函数类型时,它的默认值为nil。
fmt.Println(fn == nil)
这时候如果需要用到fn就需要进行判断是否nil。
切片如果声明之后没有通过内置的make或者复合字面量进行的初始化,它的值将是nil,切片的许多方法可以处理nil的切片,所以直接调用切片方法可以不用对nil进行处理
fmt.Println(len(abc)) //0
abc = append(abc,"aaa")
项len和append都可以正常使用
跟切片一样,如果映射在声明之后没有使用内置的make或者复合字面量进行的初始化,它的值将是nil,映射的许多方法可以处理nil,但是写入方法会异常。
ment, ok:= abc["adb"]
if ok {
fmt.Println(ment2)
}
声明为接口类型的变量在未被赋值时的零值为nil。
fmt.Printf("%T %v %v\n",v,v,v==nil)
如果接口类型的变量被赋值之后,接口就会在内部指向该变量的类型和值。
v = p
fmt.Printf("%T %v %v\n",v,v,v==nil)
你会发现值为nil的变量不等于nil,这是因为接口类型的变量只有类型和值都是nil时才等于nil,所以即使接口变量的值仍然是nil,但只要他的类型不为nil,那么该变量就不等于nil。
为了避免在比较接口变量和nil时得出出乎意料的结果,最好的做法是明确地使用nil标识符,而不是指向一个包含nil的变量。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK