GO 接口类型 interface{} 小记
go 接口 应该包含两个内容
一个是使用该接口的对象,一个是接口本身的定义
新手按照这个顺序去理解
1.概念:接口是多个对象类型(含接口本身)共同商议出来的一个仅包含标准化可调用的方法名的集合体(结构体)(本身是个指针对象属于引用类型,关键字interface{}
所以即可以先通过对象已有的方法去设计接口,也可以先设计好接口再由对象去实现对应的方法体
3.这些参与商议(或者后续新来)的对象如果要实现(使用)这个接口,则必须实现这个接口包含的所有方法名对应的函数体(含返回值类型)
4.定义一个属于自己的接口类
使用type xxx interface{ //(go里面type类似于其他语言的class)
a()[...type] //...type指定该动作返回的数据类型
b()[...type]
c()[...type]
...
}
得到一个名为xxx的接口类,通常是为引用或者继承做准备
5.直接声明一个自定义接口的实例
使用var yyy interface{ //或者直接 var yyy xxx
a()[...type] //...type指定该动作返回的数据类型
b()[...type]
c()[...type]
...
}
得到一个名为yyy的接口实例,也是最终要用的
1,在载入满足该接口规范的对象(类型)之前,不能直接使用该接口的动作名(否则报错)
3.一个对象(类型)如果实现了一个接口中所有动作名对应的动方法,就称该对象(类型)满足该接口的规范,可以使用该接口
4.不包含动作名的接口称为空接口,可以接受任意类型的对象,但同样的无法调用该对象的方法
5,接口的的继承
可以通过type b interface{
xxx //上面定义的xxx接口类,这里注意,不能用yyy,因为它是实例,不是类
d()[...type] //...type指定该动作返回的数据类型
e()[...type]
f()[...type]]
...
}
来引用或者继承已有的接口
6.不同名的接口实例或接口类允许有同样的方法名,但是在同一个接口实例或者接口类内禁止有相同的方法名 尤其是在引用或者继承这些操作里