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#に持つ利点のいくつかを引き出すことができますか?