golang 中的 nil的场景分析
源码中的 nil 是这样定义的
所以 nil 可以理解为这些类型的零值,声明一个变量在没有赋值的情况下,变量处于零值状态。
场景一
真相是 i 刚开始没有类型,而 p 是有类型,所以 p 和 i 都等于 nil,但是 == 可以理解为 php 或者 js 里面的 === 全等,既要类型相等,也要值相等。
在 i = p 之后,p 和 i 类型和值保持了一致所以会相等,但是 i 已经不等于 nil 了,因为 nil 是 interface 的 0 值,或者说 i 已经指向 p ,i 现在是个有类型状态而非 0 值状态。
结果如下
p==i false
i= <nil> i==null true
p= <nil> p==nil true
i typeof= <nil> i valueof <invalid reflect.value>
p typeof= *int p valueof <nil>
---
p==i true
i= <nil> i==null false
p= <nil> p==nil true
i typeof= *int i valueof <nil>
p typeof= *int p valueof <nil>
场景二
a 传递到 func 里面,被转成 interface,这个 interface 是有类型的 interface,相当于赋值了一下 i=a ,所以 i 的状态不是 interface 的零值状态 ,和 interface 零值状态的 nil 当然是不相等
场景三
结构体的 0 值为 {}
到此这篇关于golang 中的 nil的场景分析的文章就介绍到这了,更多相关golang 中的 nil内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
上一篇: go语言特点