Problem:
Beim Versuch, ein Slice-Slice als entpackte Argumente an ein Variadic zu übergeben Funktion tritt ein Kompilierungsfehler auf. Der Fehler weist darauf hin, dass der Quell-Slice-Typ nicht dem variadischen Parametertyp des Ziels zugewiesen werden kann.
Erklärung:
Gemäß der Go-Spezifikation ist eine Funktion mit variadischen Parametern vom Typ .. .T erwartet ein einzelnes Slice vom Typ []T als Argument. Im Fall eines Slices von Slices, [][]T, kann diese Bedingung jedoch nicht erfüllt werden.
Lösung:
Um dieses Problem zu beheben, muss ein neues Slice des Der erforderliche Typ []T muss erstellt und mit den gewünschten Werten gefüllt werden. Dieses neue Slice kann dann entpackt mit dem Ellipsenoperator (...) übergeben werden.
Beispiel:
<code class="go">package main import ( "fmt" ) func unpack(args ...interface{}) { fmt.Println(len(args)) } func main() { sliceOfSlices := [][]int{ []int{1, 2}, []int{101, 102}, } // Create a new slice of type []interface{} sliceOfInterfaces := []interface{}{} for _, v := range sliceOfSlices { sliceOfInterfaces = append(sliceOfInterfaces, v) } unpack(sliceOfInterfaces...) // Pass unpacked values }</code>
Ausgabe:
2
In diesem Beispiel wird die Funktion unpack() mit den entpackten Elementen der SliceOfSlices als Argumente aufgerufen. Die Funktion len() wird verwendet, um die Anzahl der übergebenen Argumente zu demonstrieren, was anzeigt, dass beide Elemente des verschachtelten Slice entpackt sind.
Das obige ist der detaillierte Inhalt vonWie übergebe ich ein Slice-Slice als entpackte Argumente an eine variadische Funktion in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!