Go 面试系列:Go interface中nil的比较问题
前言
现在的大厂都开始慢慢使用Go语言了,例如字节已经把Go作为后端开发的主要编程语言。但是Go的面试题总结的比较少,于是打算开启这个专栏,一起学习一起进步。
最近在网上看到有小伙伴在 Go 面试的时候被问到了:
来自网上博客的截图
今天特意分享出来让大家避开这个坑。
例子一
第一个例子,如下代码:
func main() {
var v interface{}
v = (*int)(nil)
fmt.Println(v == nil)
}
你觉得输出结果是什么呢?
答案是:
false
为什么不是 true
。明明都已经强行置为 nil
了。是不是 Go 编译器有问题?
例子二
第二个例子,如下代码:
func main() {
var data *byte
var in interface{}
fmt.Println(data, data == nil)
fmt.Println(in, in == nil)
in = data
fmt.Println(in, in == nil)
}
你觉得输出结果是什么呢?
答案是:
<nil> true
<nil> true
<n