Heim  >  Artikel  >  Backend-Entwicklung  >  Wie übergebe ich eine Slice-Slice als variadische Argumente in Go?

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

Patricia Arquette
Patricia ArquetteOriginal
2024-10-27 04:09:03989Durchsuche

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 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!

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