go语言入门经典_Go语言入门必知教程-接口

"本文详细介绍了编程中的接口概念,包括如何定义接口、实现接口以及接口的多态性。通过示例展示了如何定义满足特定接口的类型,并讨论了类型如何实现多个接口。此外,还解释了接口嵌入以及空接口类型interface{}
摘要由CSDN通过智能技术生成

接口是一种抽象类型。

接口描述了一套方法集里的所有方法,并为每个方法提供签名。

使用interface关键字要创建接口,后跟大括号,里面是方法签名列表。

6d2d9873eba7b16a660f1e6f92ff60c4.png

接口就像是方法集的蓝图,这些方法在使用前必须先实现。满足了接口所有方法的类型则称为实现接口。

定义满足接口的类型

先定义名字为Employee的接口类型,它具有两个方法。

然后定义想要满足Employee接口的名字为Emp的用户定义类型。

最后通过声明接收器的方式在Emp上定义了实现接口需要的所有方法,叫作这个类型满足或实现接口。

571e2b20c5cca4b8f5546a53ae05f9e6.png

如果一个类型已经具有了接口中声明的所有方法,不需要显式声明该类型满足接口。

声明一个接口变量e1,然后创建一个Emp值并赋值给e1,通过接口变量调用方法,Emp值成为接口e1的具体值。

定义满足多个接口的类型

接口允许任何用户定义的类型同时满足多个接口。

使用类型断言,从接口返回底层具体类型的值,在具体值上调用在其他接口上定义的方法

4eed70b69b9ba84b46648a29df9e332b.png

当用户定义类型实现由接口类型声明的方法集时,可以将用户定义类型的值赋给接口变量。此赋值将用户定义类型的值存储到接口变量中。当对接口值进行方法调用时,执行的是存储的用户定义类型值上的等效方法。由于任何用户定义的类型都可以实现任何接口,因此对接口值的方法调用本质上是多态的。此关系中的用户定义类型通常称为接口的具体类型,值称为接口的具体值。

公共方法的接口

两个或多个接口在方法集列表中可以有一个或多个公共方法。以下示例中,Structure是Vehicle和Human两个接口之间的公共方法。

f41167069adcf115e4fe26bc35405103.png

结果:

ECU <=====> Brain

Engine <=====> Heart

Air Filters <=====> Nose

Wipers <=====> Eyelashes

Gas Task <=====> Stomach

接受变量地址或指针的接口

Print()方法签名中声明的是接收器类型为指针。因此,接口变量接受的值也必须是与接收器相同类型的指针。

如果方法普通类型的接收器,则接口必须接收普通类型的值;如果方法具有指针接收器,则接口必须接收相应类型变量的地址。

2cffc1af3264277d229d31d8bc7e9a12.png

空接口类型

类型interface{}称为空接口,用于接受任何类型的值。空接口没有任何需要满足的方法,因此每种类型都满足它。

0a01b855d5356ef7374d62444743eae1.png

manyType变量被声明为类型接口{},因此可以为其赋予不同类型的值。printType()函数接受类型interface{}的参数,因此此函数可以接受任何有效类型的值。

结果:

100

200.5

Germany

Go programming language

[india japan canada australia russia]

map[Mark:10 Sandy:20]

[Japan Australia Germany]

多态性

多态性是指通过多种类型的实现相同接口以达到可以执行不同行为的能力。

声明声明结构Pentagon,Hexagon,Octagon和Decagon以及它们对Geometry接口的实现。

7c0baa59ab166f9048c01293b6921859.png

结果:

25

30

40

50

多态函数Parameter接受的参数是实现了Geometry接口的值,传入的每个具体类型值使用函数Edges实现相应的功能。

接口嵌入

接口可以嵌入其他接口,这种行为是接口多态性的一个方面,称为临时多态性。

a1a8383ad058424e374f442c168d8d63.png

当一个类型嵌入到另一个类型中时,嵌入类型的方法对外层类型可用。外层接口可以直接访问嵌套接口的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值