Heim > Backend-Entwicklung > Golang > Wie erstelle ich einen generischen Typ für einen Zeiger, der eine Schnittstelle in Go implementiert?

Wie erstelle ich einen generischen Typ für einen Zeiger, der eine Schnittstelle in Go implementiert?

Linda Hamilton
Freigeben: 2024-12-29 20:40:18
Original
426 Leute haben es durchsucht

How to Create a Generic Type for a Pointer Implementing an Interface in Go?

Generischer Typ für einen Zeiger, der eine Schnittstelle implementiert

Beim Arbeiten mit Schnittstellen in Go kann es notwendig sein, einen Zeiger auf a zu übergeben Struktur, die die Schnittstelle implementiert. Dies kann beim Definieren generischer Funktionen eine Herausforderung darstellen.

Frage:

Wie kann ich einen generischen Typ für einen Zeiger erstellen, der eine Schnittstelle implementiert?

Antwort:

Option 1: Schnittstelle ändern Definition

  1. Deklarieren Sie die Schnittstelle mit einem Typparameter, um anzugeben, dass ihr implementierender Typ ein Zeiger auf ihren Typparameter sein muss:
type A[P any] interface {
    SomeMethod()
    *P
}
Nach dem Login kopieren
  1. Ändern Sie die Signatur des Handlers:
func Handler[P any, T A[P]](callback func(result T)) {
    result := new(P)
    callback(result)
}
Nach dem Login kopieren

Option 2: Wrapping the Interface (If Eine Änderung der Definition ist nicht möglich)

  1. Erstellen Sie eine Wrapper-Schnittstelle, die die ursprüngliche Schnittstelle einbettet und einen Zeiger auf ihren Typparameter hinzufügt:
type MyA[P any] interface {
    A
    *P
}
Nach dem Login kopieren
  1. Ändern Sie die Signatur des Handlers, um das Verpacken zu akzeptieren Schnittstelle:
func Handler[P any, T MyA[P]](callback func(result T)) {
    result := new(P)
    callback(result)
}
Nach dem Login kopieren

Verwendung:

Beide Optionen ermöglichen die Übergabe eines Zeigers auf eine Struktur, die die A-Schnittstelle zum generischen Funktionshandler implementiert. Zum Beispiel:

type Aimpl struct {}

func (a *Aimpl) SomeMethod() {}

func main() {
    Handler(func(a *Aimpl) { fmt.Printf("%#v\n", a) })
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie erstelle ich einen generischen Typ für einen Zeiger, der eine Schnittstelle in Go implementiert?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage