go语言学习笔记 — 接口 — 实现接口的条件(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时,不需要也不可能有类派生,开发者唯一需要关注的是“我需要什么,我能实现什么”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值