一、基本介绍
类型断言,由于接口是一般类型,不知道具体类型,如果要转成具体类型,就需要使用类型断言,具体的如下:

在进行类型断言时,如果类型不匹配,就会报panic,因此进行类型断言时,要确保原来的空接口指向的是断言的类型。
如何在进行断言时带上检测机制,无论成功失败都不影响程序执行(成功了就继续执行、失败了也不用报panic呢)?
如下:

if判断语句可以做合并,简洁版如下:


从输出可以看出,无论convert success还是convert fail,程序都能继续执行。
二、应用场景
1、实践1
在前面的Usb接口案例做改进:
给Phone结构体增加一个特有的方法call(),当Usb接口接收的是Phone变量时,还需要调用call()方法。


Computer的Working()方法需要知道传进来Usb是Phone的还是Camera的,如果是Phone的,就执行Phone类型的专属方法Call()。这个功能的实现就是通过类型断言来知晓传进来的Usb是哪种类型。
2、实践2
写一函数,循环判断传入参数的类型。

输出如下:

这里有个需要注意的点,TypeJudge函数传入的是可变参数,而且类型是interface{},是一个空接口,由于空接口没有设计方法,所以任何类型都可以传入空接口。
网友评论