云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!
Type Assertion
Type Assertion(中文名叫:类型断言),通过它可以做到以下几件事情
1.检查 i 是否为 nil
2.检查 i 存储的值是否为某个类型
具体的使用方式有两种:
第一种:
这个表达式可以断言一个接口对象(i)里不是 nil,并且接口对象(i)存储的值的类型是 T,如果断言成功,就会返回值给 t,如果断言失败,就会触发 panic。
来写段代码试验一下
运行后输出如下,可以发现在执行第二次断言的时候失败了,并且触发了 panic
如果要断言的接口值是 nil,那我们来看看也是不是也如预期一样会触发panic
输出如下,确实是会 触发 panic
第二种
和上面一样,这个表达式也是可以断言一个接口对象(i)里不是 nil,并且接口对象(i)存储的值的类型是 T,如果断言成功,就会返回其类型给 t,并且此时 ok 的值 为 true,表示断言成功。
如果接口值的类型,并不是我们所断言的 T,就会断言失败,但和第一种表达式不同的事,这个不会触发 panic,而是将 ok 的值设为 false ,表示断言失败,此时t 为 T 的零值。
稍微修改下上面的例子,如下
运行后输出如下,可以发现在执行第二次断言的时候,虽然失败了,但并没有触发了 panic。
上面这段输出,你要注意的是第二个断言的输出在-false 之前并不是有没有输出任何 t2 的值,而是由于断言失败,所以 t2 得到的是 string 的零值也是 "" ,它是零长度的,所以你看不到其输出。
Type Switch
如果需要区分多种类型,可以使用 type switch 断言,这个将会比一个一个进行类型断言更简单、直接、高效。
输出如下
额外说明一下:
- 如果你的值是 nil,那么匹配的是 case nil
- 如果你的值在 switch-case 里并没有匹配对应的类型,那么走的是 default 分支
【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK
原文发布时间:2020-05-11
本文作者:王一白
本文来自:“掘金”,了解相关信息可以关注“掘金”