且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Go 语言中的类型断言是什么?

更新时间:2022-09-02 18:55:11

云栖号资讯:【点击查看更多行业资讯
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!


Type Assertion

Type Assertion(中文名叫:类型断言),通过它可以做到以下几件事情

1.检查 i 是否为 nil

2.检查 i 存储的值是否为某个类型

具体的使用方式有两种:

第一种:

Go 语言中的类型断言是什么?

这个表达式可以断言一个接口对象(i)里不是 nil,并且接口对象(i)存储的值的类型是 T,如果断言成功,就会返回值给 t,如果断言失败,就会触发 panic。

来写段代码试验一下

Go 语言中的类型断言是什么?

运行后输出如下,可以发现在执行第二次断言的时候失败了,并且触发了 panic

Go 语言中的类型断言是什么?

如果要断言的接口值是 nil,那我们来看看也是不是也如预期一样会触发panic

Go 语言中的类型断言是什么?

输出如下,确实是会 触发 panic

Go 语言中的类型断言是什么?

第二种

Go 语言中的类型断言是什么?

和上面一样,这个表达式也是可以断言一个接口对象(i)里不是 nil,并且接口对象(i)存储的值的类型是 T,如果断言成功,就会返回其类型给 t,并且此时 ok 的值 为 true,表示断言成功。

如果接口值的类型,并不是我们所断言的 T,就会断言失败,但和第一种表达式不同的事,这个不会触发 panic,而是将 ok 的值设为 false ,表示断言失败,此时t 为 T 的零值。

稍微修改下上面的例子,如下

Go 语言中的类型断言是什么?

运行后输出如下,可以发现在执行第二次断言的时候,虽然失败了,但并没有触发了 panic。

Go 语言中的类型断言是什么?

上面这段输出,你要注意的是第二个断言的输出在-false 之前并不是有没有输出任何 t2 的值,而是由于断言失败,所以 t2 得到的是 string 的零值也是 "" ,它是零长度的,所以你看不到其输出。

Type Switch

如果需要区分多种类型,可以使用 type switch 断言,这个将会比一个一个进行类型断言更简单、直接、高效。

Go 语言中的类型断言是什么?

输出如下

Go 语言中的类型断言是什么?

额外说明一下:

  • 如果你的值是 nil,那么匹配的是 case nil
  • 如果你的值在 switch-case 里并没有匹配对应的类型,那么走的是 default 分支

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-05-11
本文作者:王一白
本文来自:“掘金”,了解相关信息可以关注“掘金”