从设计上规避Go语言的 interface{} == nil 判断容易出错的简单办法


声明:本文转载自https://my.oschina.net/linker/blog/1510802,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

Go语言的interface{} 本质上是一个结构,含有一个type字段,一个pointer字段。

很多初学者会拿一个已经在某种情况下被赋予类型的interface{}和nil比较,然后惊讶的发现两者居然不等

其实,从设计上,我们可以很容易规避这个问题,那就是利用Go的函数多返回值特性,在一般返回值后增加一个 ok bool类型的返回值,即可。

使用的时候,只判断最后一项返回值 ok 是不是等于true即可,完美避免了陷入x可能带有类型信息的麻烦。

对此有怀疑的同学可以比较下下面两种情况:

深究起来是因为任何指针赋值给interface{}的时候,都会把interface{}的类型信息字段给填上,于是就不等于nil了。再看下面这个例子:

变量t是一个空指针,赋值给i以后,i就不等于nil了。

为了代码的清晰可读,我建议采用本文开头推荐的函数返回值设计,绕开本文所描述的陷阱。

 

 

 

 

 

本文发表于2017年08月16日 00:36
(c)注:本文转载自https://my.oschina.net/linker/blog/1510802,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 2077 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1