为什么需要Interface

写了一个月的插件,发现interface这个关键词几乎没怎么用,然后好奇,打开了gjson的源码,发现gjson的源码用的也很少,最多的用法是相当于java中的object。我开始思索,为什么需要Interface,而不是一个object(写到这里,我想起了被C语言里void* 支配的恐惧)。

个人感觉interface中翻译成接口是有点令人费解。正如handler译成句柄,貌似当时是写错了,勾被看错成句,handler,勾柄,就是门把手,socket就是插座的意思。

对interface(接口)最基本的印象,是fmt.Println这个方法,当时就觉得很神奇,真要实现了String方法,就可以被打印出来。现在写多了程序,就发现,“接口即合约”。
我看到IO里reader/writer的实现,都是用的interface,我也试者去编写自己的 reader/writer,然后当做一个变量去传递。也许是我最近的工作都是在一个包里进行、也不用进行传递,更不用说什么struct的交换。

更权威的总结如下:

An interface is a kind of contract which the implementing type(s) must fulfill. Interfaces describe the behaviorof types, what they can do. They completely separate the definition of what an object can do from how it does it, allowing distinct implementations to be represented at different times by the same interface variable, which is what polymorphism essentially is.
Writing functions so that they accept an interface variable as a parameter makes them more general.
《The Way to Go》

野生翻译如下:

接口是一种必须要全部实现(所申明函数)的约束。接口定义了类型的行为,即:“它们可以做什么”。与“一个对象怎么去做”的定义完全不一样,他允许在不同的时间里,相同的接口变量代表着不同的实现,这就是Go多态性的本质。写方法时,让他们接收接口类型,就像平常的传递一个参数那样。

总结interface

  • 处理未知的数据类型
  • Golang的泛型

写了这么久的Golang,我在想,以前java/C++那一套,构造函数,重载,也并不是真的就那么的必要。但是无比怀念Java的泛型,还有gradle。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • **2014真题Directions:Read the following text. Choose the be...
    又是夜半惊坐起阅读 10,127评论 0 23
  • 推荐给各位科研工作者一本好书:writing science。这本书不同于其他教写作的书,不是从写作的角度教你具体...
    石博士阅读 5,457评论 1 17
  • 感激101-004 感激我的心静不下来而且肩膀疼、浑身累,这让我今天开始去关注冥想和音乐,甚至有去欣赏美好的图...
    我和榕树阅读 209评论 0 0
  • 当孩子做了偏差行为时,我们可以先问自己:“他这么做,背后一定有一个重要理由,那是什么呢?” 借由这句问话:不但可以...
    语馨_f389阅读 148评论 0 0
  • 一日终于醒来 从懵懂诞生 到被力量充斥 初晨的阳光 到听蝉鸣夏日 一天与一生 都要睁眸见证 从稚嫩柔弱 到放松来拥...
    白森丶阅读 316评论 2 0