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

本文探讨了Go面试中关于interface中nil比较的问题,通过两个实例展示了非预期的结果,并解释了原因:interface不是指针类型,而是包含类型和值两部分,因此nil判断不同于普通值。解决方案包括使用反射或改变程序逻辑,避免直接的nil比较。
最低0.47元/天 解锁文章
877

被折叠的 条评论
为什么被折叠?



