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
Barbara StreisandOriginal
2024-12-29 00:36:09145Durchsuche

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
}

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

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
}

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

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!

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