„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie übergebe ich eine Slice-Slice als variadische Argumente in Go?

Wie übergebe ich eine Slice-Slice als variadische Argumente in Go?

Veröffentlicht am 07.11.2024
Durchsuche:800

How to Pass a Slice of Slices as Variadic Arguments in Go?

Übergabe entpackter Slices als variadische Argumente

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 zugewiesen 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 ....

Zum Beispiel:

var sliceOfSlices2 []interface{}
for _, v := range sliceOfSlices {
    sliceOfSlices2 = append(sliceOfSlices2, v)
}

unpack(sliceOfSlices2...)

Dieser Ansatz stellt sicher, dass jedes Element des Slice-Slices wie beabsichtigt separat an die Unpack-Funktion übergeben wird.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3