W samouczku na temat języka Go wyjaśniają, w jaki sposób działają interfejsy:
Go nie ma zajęć. Można jednak zdefiniować metody dla typów struktur. Odbiornik metoda pojawia się we własnym listy argumentów pomiędzy hasła funk i nazwy metody.
type Vertex struct {
X, Y float64
}
func (v *Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
Typ interfejsu jest definiowany przez zestaw metod. Wartość typu interfejsu może zawierać dowolną wartość implementującą te metody.
Jest to jedyny sposób na utworzenie interfejsu w Go. Google wyjaśnia dalej, że:
Typ implementuje interfejs poprzez implementację metod. Nie ma wyraźnej deklaracji woli [tj.
interface
Deklaracji].Interfejsy niejawne oddzielają pakiety implementacyjne od pakietów, które definiują interfejsy: żaden nie zależy od drugiego.
Zachęca również do definiowania precyzyjnych interfejsów, ponieważ nie musisz znajdować każdej implementacji i oznaczać ją nową nazwą interfejsu.
To wszystko wygląda podejrzanie jak Metody rozszerzeń w C # , z tym wyjątkiem, że metody w Go są bezwzględnie polimorficzne; będą działać na każdym rodzaju, który je implementuje.
Google twierdzi, że zachęca to do szybkiego rozwoju, ale dlaczego? Czy coś rezygnujesz, odchodząc od jawnych interfejsów w C #? Czy metody rozszerzeń w języku C # pozwalają uzyskać niektóre korzyści, jakie interfejsy Go mają w języku C #?