Heim >Backend-Entwicklung >Golang >Wie erstelle ich einen generischen Typ für einen Zeiger, der eine Schnittstelle in Go implementiert?
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
type A[P any] interface { SomeMethod() *P }
func Handler[P any, T A[P]](callback func(result T)) { result := new(P) callback(result) }
Option 2: Wrapping the Interface (If Eine Änderung der Definition ist nicht möglich)
type MyA[P any] interface { A *P }
func Handler[P any, T MyA[P]](callback func(result T)) { result := new(P) callback(result) }
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) }) }
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!