**以下程序输出结果是什么?**
func isNull(obj any) bool {
return obj == nil
}
func testIsNull() {
var v1 any
var v3 *int
fmt.Println("v1 is", isNull(v1))
fmt.Println("v3 is", isNull(v3))
}
结果:
v1 is true
v3 is false
这段代码v3的结果可能让人难以明白,明明传进去的是nil,为什么返回结果是false呢?
这和interface的底层结构有关,any是interface的别名,而interface在没有包含具体方法时,其底层结构包含_type和data两个字段,虽然data为空,但是_type存储的是*int,故此时v3传入到isNull中的obj是非空的。
但是v1是nil,因为v1传到isNull之后,其_type和data两个字段都是nil,故obj为nil。