Im Go Language Tutorial erklären sie , wie Schnittstellen funktionieren:
Go hat keine Klassen. Sie können jedoch Methoden für Strukturtypen definieren. Der Methodenempfänger wird in einer eigenen Argumentliste zwischen dem Schlüsselwort func und dem Methodennamen angezeigt.
type Vertex struct {
X, Y float64
}
func (v *Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
Ein Schnittstellentyp wird durch eine Reihe von Methoden definiert. Ein Wert vom Typ interface kann einen beliebigen Wert enthalten, der diese Methoden implementiert.
Dies ist die einzige Möglichkeit, eine Benutzeroberfläche in Go zu erstellen. Google erklärt weiter, dass:
Ein Typ implementiert eine Schnittstelle durch Implementieren der Methoden. Es gibt keine explizite Absichtserklärung
interface
.Implizite Schnittstellen entkoppeln Implementierungspakete von den Paketen, die die Schnittstellen definieren: keine hängt von der anderen ab.
Es unterstützt auch die Definition präziser Schnittstellen, da Sie nicht jede Implementierung finden und mit dem neuen Schnittstellennamen versehen müssen.
Dies klingt alles verdächtig nach Erweiterungsmethoden in C # , mit der Ausnahme, dass Methoden in Go rücksichtslos polymorph sind. Sie funktionieren mit jedem Typ , der sie implementiert.
Google behauptet, dies fördere eine rasche Entwicklung, aber warum? Geben Sie etwas auf, indem Sie sich von expliziten Schnittstellen in C # entfernen? Können mit Erweiterungsmethoden in C # einige der Vorteile von Go-Schnittstellen in C # abgeleitet werden?