Golang中接口类型详解与最佳实践(二)

文章详细阐述了Golang中接口(interface)的概念,包括如何定义接口、如何判断类型是否实现了接口,以及接口的嵌套和组合。强调了鸭子类型的接口实现方式,提倡定义小粒度接口以增强代码的灵活性和可组合性。文中还举例展示了标准库中如何使用接口组合,如ReadWriter和ReadCloser接口。
摘要由CSDN通过智能技术生成

之前的文章《Golang中的interface(接口)详解与最佳实践》详细介绍了接口类型的定义、使用方法和最佳实践。接口类型使得编写可扩展、可维护和可复用的高质量代码变得更加容易。

如何判断是否实现了某个接口?

还是使用之前文章的例子,例如声明了如下一个接口MyInterface:

type MyInterface interface {
    Method1()
    Method2() int
}

这个接口定义了两个方法Method1和Method2。

对于任何类型数据,只要它的方法中包含Method1和Method2并且形参和返回值也与Method1和Method一致,那么它就实现了MyInterface接口。这是一种无侵入式的接口实现方式,这种方式也叫做duck typing(在程序设计中,duck typing(鸭子类型)是动态类型的一种风格,即一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由"当前方法和属性的集合"决定)。当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。

可以看出某个类型数据是否是某个接口的实现需要满足如下条件:这个类型数据的方法中包含了接口定义的全部方法并且形参和返回值一致。

接口嵌套

接口嵌套,也称为接口组合,只要把一个接口的名称直接写到另一个接口的成员列表中就可以了,例如:

type MyInterface interface {
    Method1()
    Method2() int
}

type MyInterface2 interface {
    MyInterface
    Method3() string
}

接口MyInterface2包含了两个成员,一个是MyInterface类型的,一个是Method3方法。此时,MyInterface2也包含了Method1和Method2方法。

Golang官方推荐定义小粒度的接口,因为小粒度的接口只负责表达某类特征,通过灵活组合可以实现更强大的功能。Golang很多标准库中都采用了这种思路,例如io库中,看如下代码片段:

// ReadWriter is the interface that groups the basic Read and Write methods.
type ReadWriter interface {
	Reader
	Writer
}

// ReadCloser is the interface that groups the basic Read and Close methods.
type ReadCloser interface {
	Reader
	Closer
}

其中ReadWriter接口由Reader和Writer接口组合而成,ReadCloser接口由Reader和Closer接口组合而成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路多辛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值