面试题答案
一键面试这段代码会输出:空接口不为nil。
在Go语言中,空接口 interface{}
其实是一个包含了类型信息和值的结构体。当声明 var a interface{} = nil
时,虽然值是 nil
,但类型信息也为空,此时空接口变量并非真正意义上的 nil
。
如果想要正确判断空接口是否为 nil
,可以利用类型断言,代码如下:
package main
import (
"fmt"
)
func checkNil(i interface{}) {
if i == nil {
fmt.Println("空接口为nil")
} else {
_, ok := i.(type)
if!ok {
fmt.Println("空接口为nil")
} else {
fmt.Println("空接口不为nil")
}
}
}
func main() {
var a interface{} = nil
checkNil(a)
}
这样修改后,代码就能够正确判断空接口是否为 nil
了。