go语言interface设计的一点思考

昨天到公司看到有人在群里把go跟java的interface做比较,提出go宣称的“非侵入式”好像也没那么好用,甚至跟java差不多。但实际上go语言的接口设计并不只是语法本身,也包含了开发流程跟思维方式在里面,下面把当时在群里的回答整理一下放出来。

其实可以这样来理解:
Java语言的开发风格是设计先行,即先定义规范,然后去挨个实现(就是先定义有什么方法,然后再写出来方法体)。
而go语言是“先做再说”,即先把功能实现,然后抽取出接口。
在实际开发流程中,早先的从文档到代码的流程,确实Java更符合。但是开发流程本身也是在发展的,比如后来居上的敏捷流程就让Java出现了雪崩的感觉(给interface加个东西,所有声明implement该interface的都会报错)。但是go就比较贴合这种流程,首先出现的是具体干活的实体,实体多了才抽象出的接口,有了接口之后新写的代码可以使用interface作为参数类型,同时不会导致原有代码编译失败。这就允许开发者随意在未来的任何时间来重构代码,或者不做任何修改,这才是“非侵入式”。

群里当时那问题,举例说定义了“插座”这个接口,定义“微波炉”和“空调”去实现这个接口,后来“插座”多了个“开关”方法,就导致“微波炉”和“空调”也需要实现“开关”这个方法。我当时觉得他说的插座应该是想说能插电的设备,于是在回答的时候用的是“电器”,对这个问题我是这么回答的:

然后说下你的问题,在java中可能是先在设计阶段,就定好了插座、微波炉、空调及他们之间的关系。后面设计变更加上了“开关”这个方法。但是go语言的风格是用什么就做什么,需要有东西加热食品

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值