为什么GO中没有类型继承?|Go主题月

248 阅读1分钟

继承是面向对象的编程的特点之一,至少在最许多著名的语言中,都有过太多关于类型之间关系的讨论,而这些关系通常可以自动派生。但是Go采用了一种不同的方法。 在Go中,一个类型自动满足任何指定其方法子集的接口,而不是要求程序员提前声明两个类型之间的关系。除了减少bookkeeping之外,这种方法具有一个真正的优势。 那就是类型可以一次满足许多接口,而没有传统的多重继承的复杂性。接口可以是非常轻量级的-一个只有一个甚至零个方法的接口可以表达一个有用的概念。 如果有新想法出现或要进行测试,则可以在事后添加接口,而无需对原始类型进行注释。因为类型和接口之间没有明确的关系,所以没有类型层次结构需要管理或讨论。 我们可以使用这些想法来构建类似于类型安全的Unix管道。例如,查看fmt.Fprintf如何启用对任何输出(不仅是文件)的格式化打印,如何将bufio包与文件I/O完全分开,或者image包如何生成压缩的图像文件。所有这些想法都源于一个接口(io.Writer)代表一个方法(Write)。而这仅仅是表面现象。Go的接口对程序的结构方式有着深远的影响。 这需要一些时间来适应,但是这种隐式的类型依赖样式是Go最具生产力的事情之一。

Golang 外文翻译golang.org/doc/faq#inh…