In Go akzeptieren variadische Funktionen eine unbegrenzte Anzahl von Argumenten eines bestimmten Typs. Bei der Übergabe eines Slice-Slices an eine solche Funktion ist es wichtig, die beteiligten Typkonvertierungs- und Entpackmechanismen zu verstehen.
Wenn das Slice Elemente desselben Typs wie der variadic-Parameter enthält, kann das Slice ohne übergeben werden Auspacken. Wenn das Slice jedoch eine Mischung aus Typen oder Slices innerhalb von Slices enthält, wird die Situation komplexer.
Wenn das letzte Argument einer variadischen Funktion gemäß der Go-Spezifikation einem Slice-Typ zuweisbar ist, ist dies möglich unverändert als Wert für den variadic-Parameter übergeben, wenn darauf ein ... folgt. Dies bedeutet, dass kein neues Slice erstellt wird.
Im Falle eines Slice von Slices kann das Slice selbst nicht zugeordnet werden zum variadischen Parameter (vom Typ []interface{}). Aus diesem Grund wird ein Fehler ausgegeben, wenn versucht wird, „sliceOfSlices...“ an die Entpackfunktion zu übergeben.
Um dieses Problem zu beheben, ist ein Zwischenschritt erforderlich. Es muss ein neues Slice des entsprechenden Typs (in diesem Fall []interface{}) erstellt und die Elemente des Slice-Slices hineinkopiert werden. Dieses neue Slice kann dann mit ... an die Entpackfunktion übergeben werden.
Zum Beispiel:
<code class="go">var sliceOfSlices2 []interface{} for _, v := range sliceOfSlices { sliceOfSlices2 = append(sliceOfSlices2, v) } unpack(sliceOfSlices2...)</code>
Dieser Ansatz stellt sicher, dass jedes Element des Slice-Slices separat an die übergeben wird Entpackfunktion, wie vorgesehen.
Das obige ist der detaillierte Inhalt vonWie übergebe ich eine Slice-Slice als variadische Argumente in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!