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

Können anonyme Schnittstellenimplementierungen in Go erreicht werden?

DDD
DDDOriginal
2024-11-26 18:35:13256Durchsuche

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 },
})

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 }

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
}

Beispielverwendung:

RandomNumOp(CustomOp{
    binary: func(a, b int) int { return a + b },
})

Nicht-funktionale Implementierung

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

var op NumOp = struct{ NumOp }{}

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!

Stellungnahme:
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