1.7.4 接口的常见应用

一、类型推断

  1. 类型推断可将接口变量还原为初始变量,或用来判断是否实现了某个更具体的接口类型

  2. 还有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")
    	}
    }

二、实现多态功能

  1. 多态功能是接口实现的重要功能,也是Go语言中的一大行为特色

  2. 多态一般要结合Go语言的方法实现,作为函数参数可以很容易实现多态功能

  3. 示例:函数sendMessage()接收一个实现了Message接口的值作为参数,既然任意一个实体都能实现该接口,那么这个函数可以针对任意实体类型的值来执行sending()方法,在调用sending()时,会根据对象的实际定义来实现不同的行为,从而实现多态行为

    结果:

三、作为不确定类型的参数

  1. 在Go语言中如果要实现查找数组最小数的泛型函数,参数是不同类型,则需要用到类型开关v.(type)

  2. 通过for语句遍历数组,遇到更小的数时保存下来,函数退出返回最后保存下来的数

    结果:

Last updated