Ist die Implementierung einer anonymen Schnittstelle in Go möglich?
Betrachten Sie die folgende Schnittstelle und eine Funktion aus einer imaginären Bibliothek:
type NumOp interface { Binary(int, int) int Ternary(int, int, int) int } func RandomNumOp(op NumOp) { // ... }
Um diese Schnittstelle zu implementieren, könnte man einen Typ definieren wie:
type MyAdd struct {} func (MyAdd) Binary(a, b int) int {return a + b } func (MyAdd) Ternary(a, b, c int) int {return a + b + c }
Bedarf an einer funktionalen Implementierung
Angenommen, wir müssen die Schnittstelle mithilfe anonymer Funktionen für Einmalszenarien implementieren. Dies würde es uns ermöglichen zu schreiben:
RandomNumOp({ Binary: func(a,b int) int { return a+b}, Ternary: func(a,b,c int) int {return a+b+c}, })
Implementierungseinschränkungen
Leider müssen sich Methodendeklarationen in Go auf Dateiebene befinden. Um eine Schnittstelle mit mehreren Methoden zu implementieren, sind diese Deklarationen erforderlich.
Arbeitsfähige Implementierung
Wenn eine funktionierende Implementierung erforderlich ist, können Sie eine Dummy-Implementierung verwenden:
type DummyOp struct{} func (DummyOp) Binary(_, _ int) int { return 0 } func (DummyOp) Ternary(_, _, _ int) int { return 0 }
Dynamische Teilimplementierung
Um einige Methoden dynamisch festzulegen, Betrachten Sie eine Delegatorstruktur:
type CustomOp struct { binary func(int, int) int ternary func(int, int, int) int } func (cop CustomOp) Binary(a, b int) int { // ... } func (cop CustomOp) Ternary(a, b, c int) int { // ... }
Nichtfunktionale Implementierung
Wenn die Methoden nicht aufrufbar sein müssen, können Sie ein anonymes Strukturliteral verwenden:
var op NumOp = struct{ NumOp }{}
Das obige ist der detaillierte Inhalt vonKann Go anonyme Schnittstellen implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!