Go - 32 Go 接口(interface)

为什么需要接口?
usb插槽就是现实中的接口,你可以把手机,相机,U盘都插在usb插槽上,而不用担心那个插槽是专门插哪个的,原因是做usb插槽的厂家和做各种设备的厂家都遵守了统一的规定包括尺寸,排线等等(一个接口解决所有的外设)。
 
在Golang中,多态特性主要是通过接口来实现的。
耦合性降低,通用性增强;
 
基本介绍
    interface类型可以定义一组方法,但是这些不需要实现。并且interface不能包含任何变量。到某个自定义类型(比如结构体Phone)要使用的时候,在根据具体情况把这些方法写出来(实现)。
 
基本语法
    type  接口名  interface{
            method1(参数列表) 返回值列表
            method2(参数列表) 返回值列表
            .......
    }
    func (t 自定义类型) method1(参数列表) 返回值列表 {
            // 方法实现
    }
    func (t 自定义类型) method2(参数列表) 返回值列表 {
            // 方法实现
    }
 
小结说明:
    1.接口里的所有方法都没有方法体,即接口的方法都是没有实现的方法,接口体现了程序设计的多态和高内聚低耦合的思想。
    2.Golang中的接口,不需要显式实现,只需要一个变量,含有接口类型中的所有方法。那么这个变量就实现了这个接口。因此,Golang中没有implement这样的关键字。
 
接口应用场景
    项目经理,管理几个程序员,开发一个软件,为了控制和管理软件开发的进度和规范,项目经理可以提前定义一些接口,让程序员去具体实现这些接口;
 
接口的细节说明
    1.接口本身不能创建实例,但是可以指向一个实现了该接口的自定义类型的变量(实例);
    2.接口中所有的方法都没有方法体,即都是没有实现的方法;
    3.在Golang中,一个自定义类型需要将某个接口的所有方法都实现,我们说这个自定义类型实现了接口;
    4.一个自定义类型只有实现了某个接口,才能将该自定义类型的实例(变量)赋给接口类型;
    5.只要是自定义数据类型,就可以实现接口,不仅仅是结构体类型(可以是任意类型)。
    6.一个自定义类型可以实现多个接口(Golang实现接口是基于方法而不是接口,所以很灵活);
    7.Golang接口中不能有任何变量;
    8.一个接口(比如A接口)可以继承多个别的接口(比如B,C接口),这时如果要实现A接口,也必须将B,C接口的方法也全部实现(接口之间可以继承)。
    9.interface类型默认是一个指针(引用类型),如果没有对interface初始化就使用,那么会输出nil
    10.空接口interface{} 没有任何方法,所以所有类型都实现了空接口,即我们可以把任何一个变量赋给空接口;
 
 
接口的最佳实现
    实现对结构体切片的排序:sort.Sort(data  interface)
 
 
实现接口和继承的比较
    接口是对继承的一种补充(猴子还想像小鸟一样飞,像小鱼一样游泳)
    // 总结    
    // 当A结构体继承了B结构体,那么A结构体就自动的继承了B结构体的字段和方法,并且可以直接使用     
    // 当A结构体需要扩展功能,同时不希望去破坏继承关系,则可以去实现某个接口即可,因此我们可以认为,实现接口是对继承机制的补充;
 
    接口和继承解决的问题不同
        继承的价值主要在于:解决代码的复用性和可维护性。
        接口的价值主要在于:设计,设计好各种规范(方法),让其它自定义类型去实现这些方法;
        
    接口比继承更加灵活
        接口比继承更加灵活,继承是满足is  -- a 的关系,而接口只需要满足 like -- a 的关系。
    
    接口在一定程度上实现代码解耦
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
posted @ 2020-12-19 19:36  以赛亚  阅读(133)  评论(0编辑  收藏  举报