Heim >Backend-Entwicklung >Golang >Wie kann ich sowohl reguläre als auch explodierte Slice-Argumente korrekt an eine variadische Funktion in Go übergeben?

Wie kann ich sowohl reguläre als auch explodierte Slice-Argumente korrekt an eine variadische Funktion in Go übergeben?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-11 16:24:14328Durchsuche

How Can I Correctly Pass Both Regular and Exploded Slice Arguments to a Variadic Function in Go?

Variadic-Funktionsargumente: Mischen von „explodierten“ Slices und regulären Parametern in Go

Die Programmiersprache Go bietet die Möglichkeit, Funktionen mit Variadic zu definieren Parameter mithilfe der „…“-Syntax. Dadurch können Funktionen eine variable Anzahl von Argumenten akzeptieren. Das Verständnis der Mechanik variadischer Argumente ist jedoch von entscheidender Bedeutung, um Laufzeitfehler zu vermeiden.

Im gegebenen Beispiel:

func main() {
    stuff := []string{"baz", "bla"}
    foo("bar", stuff...)
}

func foo(s ...string) {
    fmt.Println(s)
}

soll sowohl ein reguläres Argument („bar“) als auch übergeben werden ein „explodiertes“ Slice (Zeug...) für die Funktion foo. Dies führt jedoch aufgrund von „zu vielen Argumenten“ zu einem Kompilierungsfehler.

Der Grund für dieses Verhalten liegt in der Definition variadischer Parameter. In Go gibt es zwei unterschiedliche Möglichkeiten, Argumente für einen variadischen Parameter anzugeben:

  1. Elemente aufzählen: Jedes Element des Slice wird einzeln übergeben, durch Kommas getrennt.
  2. Verwendung eines vorhandenen Slice: Der gesamte Slice, gefolgt von ..., wird als einzelnes übergeben Argument.

Es ist nicht zulässig, diese beiden Methoden innerhalb desselben variadischen Parameters zu mischen. Wenn stuff... übergeben wird, wird das Slice selbst zum Wert des variadic-Parameters. Daher kann es nicht mit Aufzählungselementen wie „bar“ koexistieren.

Wenn das beabsichtigte Verhalten darin besteht, das Slice zu „explodieren“, wäre die folgende Syntax korrekt:

foo([]string{"bar"}...)

Dies wäre der Fall effektiv erweitern zu:

foo("bar", "baz", "bla")

Zusammenfassend lässt sich sagen, dass das Mischen von Aufzählungsargumenten mit einem Slice im Kontext variadischer Funktionen in Go nicht möglich ist. Die Sprachspezifikation schreibt vor, dass ein variadischer Parameter nur ein einzelnes Slice-Argument akzeptieren kann, das zum Wert dieses Parameters wird. Um das gewünschte „explodierende“ Verhalten zu erreichen, muss das gesamte Slice einzeln übergeben werden, ohne vorhergehende Aufzählungsargumente.

Das obige ist der detaillierte Inhalt vonWie kann ich sowohl reguläre als auch explodierte Slice-Argumente korrekt an eine variadische Funktion in Go übergeben?. 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