Heim > Backend-Entwicklung > Golang > Wie können Generics in Go Slices verschiedener numerischer Typen verarbeiten?

Wie können Generics in Go Slices verschiedener numerischer Typen verarbeiten?

DDD
Freigeben: 2024-12-25 02:12:16
Original
395 Leute haben es durchsucht

How Can Generics in Go Handle Slices of Different Numeric Types?

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)
    }
}
Nach dem Login kopieren

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)
    }
}
Nach dem Login kopieren

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!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage