31

Golang笔记: 接口(interface)

 4 years ago
source link: https://www.tuicool.com/articles/yEzqAbM
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Go语言不是一种“传统”的面向对象编程语言,它里面没有类和继承的关系。但是Go语言通过灵活的接口概念,可以实现很多面向对象的特性,不同于其他语言的接口概念,GO语言的接口独特在满足 隐式实现 (没必要给具体类型定义所有满足的接口类型)。

接口声明:

nENZBvf.png!web

接口声明格式

说明:接口类型名,使用 type 将接口定义为自定义类型名,在类型名结尾加 er

注:Go语言的每个接口中的方法数量不会很多。Go语言希望通过一个接口精准描述它自己的功能,而通过多个接口的嵌入和组合的方式将简单的接口扩展为复杂的接口。

接口的实现条件

如果一个任意类型 T 的方法集为一个接口类型的方法集的超集,则我们说类型 T 实现了此接口类型。 T 可以是一个非接口类型,也可以是一个接口类型 。实现关系是隐式的,没有类似与 implements的关键字,Go会在需要的时候自动检查两个类型之间的关系

        1:接口被实现的条件一:接口的方法与实现接口的类型方法格式一致

在类型中添加与接口签名一致的方法就可以实现该接口方法,签名方法包括方法中的名称,参数列表,返回值列表。反之就不会被实现该接口方法

m2ayAza.png!web

签名一致

        2:接口中所有方法均被实现

当一个接口中有多个方法时,只有这些方法都被实现了,接口才能被正确编译并使用。

类型与接口之间的关系

类型和接口之间有一对多和多对一的关系

1:一个类型可以同时实现多个接口,而接口之间彼此独立,不知道对方的实现

2:多个类型可以实现相同的接口,一个接口的方法, 不一定需要由一个类型完全实现 ,接口的方法可以通过在类型中嵌入其他类型或者结构体来实现。也就是说,使用者并不关心某个接口的方法是通过一个类型完全实现的,还是通过多个结构嵌入到一个结构体中拼凑起来共同实现

接口嵌套

不仅结构体与结构体之间可以嵌套,接口与接口间也可以通过嵌套创造出新的接口

INZfAbM.png!web

接口嵌套

空接口类型 (interface{})

1:空接口是接口类型的特殊形式,空接口没有任何方法,因为任何类型都无需实现空接口。从实现的角度看,任何值都满足这个接口的需求。因此 空接口类型可以保存任何值 ,也可以从空接口中取出原值。

空接口内部实现保存了对象的类型和指针,使用空接口保存一个数据的过程会比直接用数据对应类型的变量保存稍慢,因此在开发过程中尽量少用,应该需要的地方使用空接口。

3AVZnaY.png!web

空接口赋值

代码输出结果值是: 1  ;   hello  ; false

2:空接口的值比较,空接口在保存不同的值后,可以和其他变量值一样使用 == 进行比较操作

YjAbMfq.png!web

类型的可比较性


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK