不久前,我开始学习Go,发现那里许多看似熟悉的事物的工作方式有所不同。 接口就在其中。 以前,我没有考虑过鸭子输入可以使用静态类型语言的事实。 现在在我看来这是合乎逻辑的和合理的。 在这里,我将描述一个很大程度上决定了我对Go界面态度的原因。
Go是一种很扎实的语言
双关语很抱歉,无法抗拒关于“是一种面向对象的语言吗?”主题 写了许多文章,包括有关哈布雷的文章。 但是,在提出该主题时,他们很少谈论SOLID原理,通常很少谈论它们的最后一个(顺序,但不重要)-依赖倒置(DIP)原理。 如果忘记了,那么通常将其公式如下:
抽象不应依赖细节。 细节必须取决于抽象。
可能是发明来实现该原理的最强大的工具-接口。 如果您想自己弄清依赖关系的反面,那么
这是一篇不错的文章 。 顺便说一下,图片是从那里来的。

假设Foo和Bar在不同的模块中:F和B。但是,要实现该接口,我们必须将IBar接口从F导入到B,然后以某种方式将其实现转移回F。包之间(不是根据行为,而是根据导入)。 这是我们接口的隐式实现的地方。 我们可以将Bar从B导入到F,然后Go会自己判断出它是否实现IBar。 在这种情况下,在实现过程中明确指定接口将变得多余。
最后几句话
Go中的接口是一个强大的工具,包括用于依赖关系反转的工具。 但是您不应该为所有内容创建它们,因此每次都要问自己-为什么要这样做。
您喜欢/不喜欢Go类型系统吗?