go语言学习笔记 — 进阶 — 接口(2.2):实现接口的条件 —— 接口中的方法都被实现

Posted Locutus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言学习笔记 — 进阶 — 接口(2.2):实现接口的条件 —— 接口中的方法都被实现相关的知识,希望对你有一定的参考价值。

当一个接口含有多个方法时,只有这些接口方法都被实现了,我们才能正确编译并使用接口。如下所示,在接口中包含WriteData方法和CanWrite方法,只有在file结构体绑定方法WriteData和CanWrite之后,才能正常使用接口。

type DataWwriter interface {
    WriteData(data interface{})
    
    CanWrite() bool  // 新增接口方法CanWrite
}

type file struct{}
func (d *file) WriteData(data interface{}) error {
    ...
}

func (d *file) WriteData() bool {
    ...
}

go语言的接口实现是隐式的,我们无须让实现接口的(结构体)类型知道有哪些接口(需要被实现),这个称为非侵入式设计。

我们在编写(接口)方法时,无法预测未来有哪些(接口)方法会变成接口。一旦某个接口被创建出来,要求旧代码来实现这个接口,就需要修改旧代码的派生部分,这一般会造成雪崩式的重新编译。

注: 传统的派生接口和类构建模式,使类型之间有强耦合的父子关系。这种关系一般以类派生图的方式运行。随着系统功能的不断增加,这棵“派生树“会越来越复杂。

非侵入式设计让go程序实现的所有类型都是平行的、组合的。因此,使用go时,不需要也不可能有类派生,开发者唯一需要关注的是“我需要什么,我能实现什么”

以上是关于go语言学习笔记 — 进阶 — 接口(2.2):实现接口的条件 —— 接口中的方法都被实现的主要内容,如果未能解决你的问题,请参考以下文章

go语言学习笔记 — 进阶 — 接口(2.3):接口无法实现的例子

go语言学习笔记 — 进阶 — 接口:在接口和类型之间转换

go语言学习笔记 — 进阶 — 接口:接口的嵌套组合 —— 把多个接口放到一个接口内

go语言学习笔记 — 进阶 — 接口:使用类型分支,批量判断空接口中变量的类型

go语言学习笔记 — 进阶 — 接口:空接口类型interface{} —— 能保存所有值

go语言学习笔记 — 进阶 — 接口(3.1):接口与类型的关系 —— 一个类型可以实现多个接口