本文是Go比较有名的一个坑,在以前面试的时候也被问过,为什么想起来写这个?因为我们线上就真实出现过这个坑,写给不了解的人在使用 if err != nil 的时候提高警惕。Go语言的interface{}在使用过程中有一个特别坑的特性,当你比较一个interface{}类型的值是否是nil的时候,这是需要特别注意避免的问题。先来看看一个demo:输出:。在Go语言中,一个interface{}类型的变量包含了2个指针,一个指针指向值的在编译时确定的类型,另外一个指针指向实际的值。如果这个具体类型的值是nil的话,interface{}变量依然会存储对应的类型指针和值指针。方法一返回的结果进行非nil检查,然后再赋值给interface{}变量输出:。可以发现将接收类型变成指针类型就可以了。
暂无评论