Go 面试系列:Go interface中nil的比较问题

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值