Heim > Backend-Entwicklung > Golang > Wie gehe ich mit Slices-Vereinigungen in Go-Generic-Funktionen um?

Wie gehe ich mit Slices-Vereinigungen in Go-Generic-Funktionen um?

Barbara Streisand
Freigeben: 2024-12-24 14:15:09
Original
183 Leute haben es durchsucht

How to Handle Unions of Slices in Go Generic Functions?

Umgang mit Vereinigungen von Slices in generischen Funktionen mit Schnittstelleneinschränkungen

Angenommen, Sie benötigen eine generische Funktion, die entweder auf einem Slice von ganzen Zahlen oder auf einem Slice von ganzen Zahlen operiert Stück Schwimmer. Um dies zu implementieren, können Sie generische Elemente und Schnittstelleneinschränkungen verwenden, wie unten gezeigt:

package main

import "fmt"

// NumberSlice defines an interface for either slice of integers or slice of floats.
type NumberSlice interface {
    []int | []float64
}

// add is a generic function that iterates over a slice of NumberSlice and prints its values.
func add[N NumberSlice](n N) {
    for _, v := range n {
        fmt.Println(v)
    }
}

func main() {
    ints := []int{1, 2}
    add(ints)

    floats := []float64{3.14, 1.618}
    add(floats)
}
Nach dem Login kopieren

Beim Versuch, den obigen Code auszuführen, kann jedoch die folgende Fehlermeldung auftreten:

cannot range over n (variable of type N constrained by NumberSlice) (N has no core type)
Nach dem Login kopieren

Dieser Fehler tritt auf, weil die NumberSlice-Schnittstelle keinen Kerntyp hat. Ein Kerntyp für eine Schnittstelle ist ein einzelner zugrunde liegender Typ, den alle Typen in der Schnittstelle erben müssen. Da NumberSlice sowohl Slices von Ganzzahlen als auch Slices von Gleitkommazahlen akzeptieren kann, erfüllt es diese Anforderung nicht.

Um dieses Problem zu beheben, können Sie die Schnittstelle mithilfe der Basistypen anstelle von Slices definieren:

type Number interface {
    int | float64
}

func add[N Number](n []N) {
    for _, v := range n {
        fmt.Println(v)
    }
}
Nach dem Login kopieren

Diese modifizierte Funktion verwendet ein Segment von Number-Elementen als Parameter, sodass sie sowohl Ganzzahlen als auch Gleitkommazahlen effizient verarbeiten kann.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit Slices-Vereinigungen in Go-Generic-Funktionen um?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage