1.7.4 接口的常见应用
一、类型推断
类型推断可将接口变量还原为初始变量,或用来判断是否实现了某个更具体的接口类型
还有
switch...case语句在多种类型间做出推断匹配,这样空接口就有更多的发挥空间func main() { var a interface{} = func(a int) string { return fmt.Sprintf("d:%d", a) } switch b := a.(type) { // 局部变量b是类型转换后的结果 case nil: println("nil") case *int: println(*b) case func(int) string: println(b(88)) case fmt.Stringer: fmt.Println(b) default: println("unknown") } }
二、实现多态功能
多态功能是接口实现的重要功能,也是Go语言中的一大行为特色
多态一般要结合Go语言的方法实现,作为函数参数可以很容易实现多态功能
示例:函数sendMessage()接收一个实现了Message接口的值作为参数,既然任意一个实体都能实现该接口,那么这个函数可以针对任意实体类型的值来执行sending()方法,在调用sending()时,会根据对象的实际定义来实现不同的行为,从而实现多态行为
结果:
三、作为不确定类型的参数
在Go语言中如果要实现查找数组最小数的泛型函数,参数是不同类型,则需要用到类型开关
v.(type)通过for语句遍历数组,遇到更小的数时保存下来,函数退出返回最后保存下来的数
结果:
Last updated