温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
大家好,我是陈明勇,在这个视频里,我将会带着大家去揭秘。接口类型是Neil,但为什么不等于newl?首先我们来看一个案例,这个案例代码展示了在使用any及interface类型时判断变量是否为newl的一些细微差别。具体的说,它展示了为什么在某些情况下。类型为any的变量,即使其值为Neil,也不会被认为是Neil。在这段代码示例中,首先定义了一个isn函数,其参数为xani,然后在mainin函数里分别初始化两个不同类型的变量A和B,它们的值都被赋值为new。接下来分别将它们作为参数调用isn函数。此外还直接打印了B等等于nel的值用于对比。根据运行结果可知,在isnl函数里,A等等于nel成立,而B等等于nel不成立,但在外部,B等等于nel成立,这是因为在e nel函数里使用了any变量,导致了X等等于neal不成立。为了理解具体原因,我们需要了解any的内部结构,详情请看下文。
01:14
在勾语言中,Any是interface的别名,我们来看看interface底层组成结构图。Interface接口值在底层有两部分构成,类型部分和值部分。类型部分接口持有的具体类型,如果接口持有一个int类型的值,那么类型部分就是int。值部分接口持有的具体值,如果接口持有值是整数3,那就是3,如果是neal,那就是neal。当我们将一个值赋给接口类型,如any时,接口会保存该值的类型和具体值。只有当接口的类型部分和值部分都为new时,该接口才被认为是new。回想刚才的代码示例,当将变量B的值赋给接口类型变量X时。
02:05
此时X的内部结构为type into value=Neil,因此X=nel不成立。原来如此,懂了。既然等等于或不等于这两种方式不能完全判断接口类型是否为new,那么该怎么解决这个问题呢?答案是使用反射。通过反射我们可以直接判断某个变量值是否为new。示例代码如下所示。本次揭秘的内容到这里就结束了,我们来做个小结吧。就在刚才,我们深入探讨了在使用go语言时。为什么接口类型的变量即使其值为nel,在判断时也不等于nel的原因通过具体的代码示例和对any例及interface内部结构的解析,揭示了这一现象的本质。
03:01
关键点总结如下,接口类型、内部结构any及interface底层由类型部分和直部分组成,只有当类型部分和直部分都为new时,接口才被认为是new。解决方案使用反射机制可以准确判断一个接口类型变量是否为null。本视频到这里就结束了,点个关注吧。
我来说两句