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
DDDOriginal
2024-12-25 02:12:16420Durchsuche

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

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!

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