Heim >Backend-Entwicklung >Golang >Wie kann ich sowohl reguläre als auch explodierte Slice-Argumente korrekt an eine variadische Funktion in Go übergeben?
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:
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!