golang interface判断为空nil的实现代码
要判断interface 空的问题,首先看下其底层实现。eface表示不含 method 的 interface 结构,或者叫 empty interface。对于 Golang 中的大部分数据类型都可以抽象出来 _type 结构,同时针对不同的类型还会有一些其他信息。相比于 empty interface,non-empty 要包含一些 method。method 的具体实现存放在 itab.fun 变量里。这个下面再细说。概括起来,接口对象由接口表 指针和数据指针组成,或者说由动态类型和动态值组成。无论是反射还是通过接口调用方法,都会用到这些信息。再来看下nil的定义。所以不能直接通过与nil比较的方式判断动态值是否为空。其中,IsNil定义如下:参数v必须是chan, func, interface, map, pointer, or slice,否则会panic。如果调用IsNil的不是一个指针,会出现异常,需要捕获异常。
用户评论