首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从设计上规避Go语言的 interface{} == nil 判断容易出错的简单办法

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

作者头像
Linker
发布2018-04-13 16:09:58
6160
发布2018-04-13 16:09:58
举报

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

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

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

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

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

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

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档