Heim > Backend-Entwicklung > Golang > Wie können Generics in Go Funktionen mit zeigerbasierten Schnittstellenparametern verarbeiten?

Wie können Generics in Go Funktionen mit zeigerbasierten Schnittstellenparametern verarbeiten?

Barbara Streisand
Freigeben: 2024-12-29 00:36:09
Original
145 Leute haben es durchsucht

How Can Generics in Go Handle Functions with Pointer-Based Interface Parameters?

Generische Schnittstelle von Zeigern

In Go kann die Definition einer Schnittstelle für eine Zeigerimplementierung über Generics erfolgen. Stellen Sie sich das folgende Szenario vor:

Problem:

  • Sie haben eine Schnittstelle A mit einer Methode SomeMethod().
  • Sie haben eine Struktur Zeiger *Aimpl, der die A-Schnittstelle implementiert.
  • Sie möchten einen generischen Funktionshandler erstellen, der eine Funktion mit einem A-Parameter akzeptiert. und weist Aimpl einen Zeiger auf seinen Parameter zu.

Lösung unter Verwendung einer generischen Schnittstelle mit Typparameter:

Um dies zu erreichen, können Sie die A-Schnittstelle mit deklarieren ein Typparameter, der sicherstellt, dass der implementierende Typ ein Zeiger auf seinen Typparameter ist:

type A[P any] interface {
    SomeMethod()
    *P
}
Nach dem Login kopieren

Ändern Sie dann die Signatur des Handlers als folgt:

func Handler[P any, T A[P]](callback func(result T)) {
    result := new(P)
    callback(result)
}
Nach dem Login kopieren

Lösung mit Wrapper-Schnittstelle:

Wenn Sie die Definition von A nicht ändern können, können Sie sie in Ihre eigene Schnittstelle MyA einbinden:

type MyA[P any] interface {
    A
    *P
}
Nach dem Login kopieren

Aktualisieren Sie dann die Signatur des Handlers, um die MyA-Schnittstelle zu verwenden:

func Handler[P any, T MyA[P]](callback func(result T)) {
    result := new(P)
    callback(result)
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie können Generics in Go Funktionen mit zeigerbasierten Schnittstellenparametern verarbeiten?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage