Goは「暗黙の」インターフェースで生産性をどのように改善しますか。また、C#の拡張メソッドの概念と比較してどうですか。
Go言語のチュートリアルでは、インターフェイスの仕組みについて説明しています。 Goにはクラスがありません。ただし、構造体型のメソッドを定義できます。メソッドのレシーバは、 FUNCキーワードとメソッド名の間に独自の引数リストに表示されます。 type Vertex struct { X, Y float64 } func (v *Vertex) Abs() float64 { return math.Sqrt(v.X*v.X + v.Y*v.Y) } インターフェイスタイプは、一連のメソッドによって定義されます。インターフェイスタイプの値は、これらのメソッドを実装する任意の値を保持できます。 これは、Goでインターフェイスを作成する唯一の方法です。Googleはさらに次のように説明しています。 型は、メソッドを実装することによりインターフェースを実装します。意図の明示的な宣言はありません[ interface宣言]。 暗黙的なインターフェースは、実装パッケージをインターフェースを定義するパッケージから分離します。どちらも他に依存しません。 また、すべての実装を見つけて新しいインターフェイス名でタグ付けする必要がないため、正確なインターフェイスの定義も推奨されます。 これはすべて、Goのメソッドが容赦なく多態的であることを除いて、C#の拡張メソッドに似ています。それらは、それらを実装する任意のタイプで動作します。 Googleは、これが急速な開発を促進すると主張していますが、なぜですか?C#の明示的なインターフェイスから離れることで何かをあきらめますか?C#の拡張メソッドにより、GoインターフェイスがC#に持つ利点のいくつかを引き出すことができますか?