Nil_issue
为什么 nil 不等于 nil
我们在开发过程中会遇到使用==比较时会返回意想不到结果,常常与我们设想的结果不太一致。
首先我们看下面一段代码。我们有两个变量,每个变量都有它们自己的类型,但是每个变量都被赋值为nil。
var a *int = nil
var b interface{} = nil
下面的语句将会打印什么
fmt.Println("a == nil:", a == nil)
fmt.Println("b == nil:", b == nil)
fmt.Println("a == b:", a == b)
实际输出结果
a == nil: true
b == nil: true
a == b: false
现在我们看另外一个例子,我们用另外一种方式来给 b 赋值
var a *int = nil
var b interface{} = a
fmt.Println("a == nil:", a == nil)
fmt.Println("b == nil:", b == nil)
fmt.Println("a == b:", a == b)
输出的结果是
a == nil: true
b == nil: false
a == b: true
是不是和你期望的结果有很大差别,为啥会是这样的结果?