Verwendung von Generika mit Slices verschiedener Typen in Go
Die Berücksichtigung von Generika in Go beinhaltet das Konzept von Kerntypen für Schnittstellen. Eine Schnittstellenbeschränkung wie NumberSlice hat keinen Kerntyp, da sie mehrere zugrunde liegende Typen umfasst (z. B. []int64 und []float64). Dies stellt ein Hindernis dar, wenn Sie versuchen, über Slices innerhalb einer generischen Funktion zu iterieren.
Um dieses Problem zu lösen, besteht ein Ansatz darin, die Schnittstelle so zu ändern, dass sie die Basistypen vorschreibt und den Slice-Typ innerhalb der Funktionssignatur bestimmt :
type Number interface { int64 | float64 } func add[N Number](n []N) { for _, v := range n { fmt.Println(v) } }
Eine noch gründlichere, aber ausführlichere Lösung beinhaltet jedoch die explizite Deklaration des Kerntyps innerhalb der Schnittstelle Einschränkung:
type NumberSlice[N int64 | float64] interface { ~[]N } func add[S NumberSlice[N], N int64 | float64](n S) { for _, v := range n { fmt.Println(v) } }
Dieser Ansatz stellt sicher, dass die Schnittstelle einen bestimmten zugrunde liegenden Typ ([]N) hat und dass die Funktion Slices von entweder int64 oder float64 akzeptieren und verarbeiten kann.
Das obige ist der detaillierte Inhalt vonWie können Generics in Go Slices verschiedener numerischer Typen verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!