Heim > Backend-Entwicklung > Golang > Kann Go anonyme Schnittstellen implementieren?

Kann Go anonyme Schnittstellen implementieren?

DDD
Freigeben: 2024-11-27 03:44:16
Original
885 Leute haben es durchsucht

Can Go Implement Anonymous Interfaces?

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) {
    // ...
}
Nach dem Login kopieren

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 }
Nach dem Login kopieren

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},
})
Nach dem Login kopieren

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 }
Nach dem Login kopieren

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 {
    // ...
}
Nach dem Login kopieren

Nichtfunktionale Implementierung

Wenn die Methoden nicht aufrufbar sein müssen, können Sie ein anonymes Strukturliteral verwenden:

var op NumOp = struct{ NumOp }{}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage