Go语言中Interface的理念

chanshimudingxi · · 5059 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

Go语言中Interface淡化了面向对象中接口应具有的象征意义,接口在Go语言中仅仅只是“表现形式”上相同的一类事物的抽象概念。在Go语言中只要是具有相同“表现形式”的“类型”都具有相同的Interface,而不需要考虑这个Interface在具体的使用中应具有的实际意义。这样的话,就把Interface的成本交给使用者了,而不是交给设计者。

设计者只负责设计method,也就是Interface的构成元素,Interface在具体的使用中应该有的实际意义都是交给Interface的使用者去确定。举个最简单的例子:

跑假设有两种意思:一种是逃跑,英文叫escape;另一种是跑步,英文叫run。如果中文就一种,把他叫做pao。

type BadMan struct{
}
func (badMan *BadMan) pao(){
}

type SportMan struct{
}
func (sportMan *SportMan) pao(){
}
//设计人员只考虑这部分
type Pao Interface{
    pao()
} 
//这个部分由使用者考虑
var paoA Pao = new(BadMan)
var paoB Pao = new(SportMan)

虽然两个类型的pao接口实际意义不一样,但对Go语言来说,我认为他们的接口是一样的,因为“表现形式”相同。至于在什么情景下应该去使用BadMan或SportMan的pao接口才能正确地完成任务,这个是使用者考虑的,设计Interface的人员不要考虑。


go的interface更加接近interface这个概念的本质,因为对于实现了这个interface的类型里面的任何一个方法的类型而言,都可以划归到这个interface种群里面。而面向对象设计语言里面,类型必须安全实现interface的内容才能被其管理,否则就是一个抽象类。离诞生对象的类型还差一布。

在抽象与实例化的道路上,go语言一步到位,而java和cpp如果想一步到位的化,那么必须实现interface的全部方法。


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:chanshimudingxi

查看原文:Go语言中Interface的理念

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

5059 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传