Heim > Backend-Entwicklung > Golang > Können anonyme Schnittstellenimplementierungen in Go erreicht werden?

Können anonyme Schnittstellenimplementierungen in Go erreicht werden?

DDD
Freigeben: 2024-11-26 18:35:13
Original
277 Leute haben es durchsucht

Can Anonymous Interface Implementations Be Achieved in Go?

Anonyme Schnittstellenimplementierung in Go

Einführung

Go ermöglicht die Definition benutzerdefinierter Typen mithilfe von Schnittstellen. Es stellt sich jedoch die Frage, ob es möglich ist, eine anonyme Implementierung einer Schnittstelle für Situationen zu etablieren, in denen bestimmte Funktionen als einfache Operationen implementiert werden müssen.

Anonyme Implementierung mit Funktionen

Der Pseudocode Zur Verfügung gestellt schlägt die Erstellung einer anonymen Implementierung vor, ähnlich wie:

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

Einschränkungen

Dieser Ansatz ist jedoch in Go nicht direkt umsetzbar weil Methodendeklarationen auf Dateiebene definiert werden müssen. Um eine Schnittstelle mit mehreren Methoden zu implementieren, sind daher explizite Methodendeklarationen erforderlich.

Arbeitsfähige Implementierung

Um eine funktionsfähige Implementierung zu erhalten, können Sie eine vorhandene Struktur verwenden oder eine „Dummy“-Implementierung erstellen betonen das Fehlen von Konsequenzen. Hier ist ein Beispiel:

type DummyOp struct{}

func (DummyOp) Binary(_, _ int) int     { return 0 }
func (DummyOp) Ternary(_, _, _ int) int { return 0 }
Nach dem Login kopieren

Alternativ können Sie einen Delegator-Strukturtyp in Betracht ziehen, der es Ihnen ermöglicht, dynamisch Funktionen für die Methoden bereitzustellen:

type CustomOp struct {
    binary  func(int, int) int
    ternary func(int, int, int) int
}

func (cop CustomOp) Binary(a, b int) int {
    if cop.binary != nil {
        return cop.binary(a, b)
    }
    return 0
}

func (cop CustomOp) Ternary(a, b, c int) int {
    if cop.ternary != nil {
        return cop.ternary(a, b, c)
    }
    return 0
}
Nach dem Login kopieren

Beispielverwendung:

RandomNumOp(CustomOp{
    binary: func(a, b int) int { return a + b },
})
Nach dem Login kopieren

Nicht-funktionale Implementierung

Wenn Ihre Implementierung keine funktionalen Methoden erfordert, können Sie eine anonyme Methode verwenden Strukturliteral:

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

Das obige ist der detaillierte Inhalt vonKönnen anonyme Schnittstellenimplementierungen in Go erreicht werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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