Heim >Backend-Entwicklung >Golang >Wie können Schnittstellen in Go verwendet werden, um Methoden für verschiedene Typen ohne Codeduplizierung zu implementieren?
Methoden für verschiedene Typen mithilfe von Schnittstellen in Go implementieren
In Go bieten Schnittstellen einen Mechanismus zum Definieren einer Reihe von Methoden, die verschiedene Typen verwenden können implementieren. Dies ermöglicht polymorphes Verhalten, bei dem verschiedene Typen einen gemeinsamen Satz von Operationen teilen können.
Problemstellung
Angenommen, wir haben zwei Strukturen, First und Second, die wir wollen um eine Schnittstelle A zu implementieren, die eine Methode namens PrintStr() definiert. Jede Struktur verfügt über ein Zeichenfolgenfeld namens str. Wenn wir die PrintStr()-Methode jedoch separat für beide Strukturen implementieren, wird sie überflüssig.
Vorgeschlagene Lösung
Man könnte meinen, es sei möglich, eine einzige Implementierung von zu haben PrintStr() für beide Strukturen, indem Sie es auf der A-Schnittstelle selbst definieren. Dieser Ansatz funktioniert jedoch nicht, da Schnittstellen keine Daten übertragen.
Einbetten und Implementieren
Anstelle einer einzelnen Implementierung auf der Schnittstelle können wir eine erstellen Basistyp WithString und betten Sie ihn sowohl in First als auch Second ein. Der Typ WithString verfügt über das Feld str und implementiert die Methode PrintStr(). Durch die Einbettung von WithString erhalten sowohl First als auch Second indirekt das str-Feld und die PrintStr()-Implementierung. Dadurch können sie die A-Schnittstelle mit minimaler Duplizierung implementieren.
Beispielcode
type WithString struct { str string } type First struct { WithString } type Second struct { WithString } type A interface { PrintStr() //print First.str or Second.str } func (w WithString) PrintStr() { fmt.Print(w.str) }
Verwendung
a := First{ WithString: WithString{ str: "foo", }, }
Dieser Ansatz ermöglicht es uns, eine gemeinsame Methode für verschiedene Typen zu implementieren und gleichzeitig Codeduplizierung zu vermeiden.
Das obige ist der detaillierte Inhalt vonWie können Schnittstellen in Go verwendet werden, um Methoden für verschiedene Typen ohne Codeduplizierung zu implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!