Go erlaubt das Mischen von „explodierten“ Slices mit regulären Parametern in variadischen Funktionen nicht. Dies wird im folgenden Beispiel deutlich:
func main() { stuff := []string{"baz", "bla"} foo("bar", stuff...) // Error: too many arguments in call to foo } func foo(s ...string) { fmt.Println(s) }
Gemäß der Go-Sprachspezifikation kann ein Argument variabler Länge auf zwei Arten angegeben werden: durch Aufzählung der Elemente oder durch Verwendung eines vorhandenen Slice. Das Mischen der beiden ist nicht zulässig.
Wenn Elemente aufgezählt werden, wird ein neues Slice erstellt, in dem die Elemente zu den Werten des variadic-Parameters werden. Wenn jedoch ein vorhandener Slice mit ... verwendet wird, wird kein neuer Slice erstellt und der ursprüngliche Slice wird zum variadischen Parameter.
Die Übergabe sowohl eines einzelnen Elements als auch eines Slice führt zu einer Typinkongruenz und damit zu einem Compilerfehler. Das Mischen der beiden Optionen würde die Zuweisung eines neuen Slice erfordern, aber Go unterstützt dieses Verhalten nicht.
Die Fehlermeldung „too much arguments in call to foo“ weist darauf hin, dass der Compiler ein einzelnes Slice oder eine Liste von Elementen erwartet , aber keine Kombination aus beidem. Um dieses Problem zu beheben, entfernen Sie entweder Dinge... oder listen Sie die Elemente einzeln auf.
Das obige ist der detaillierte Inhalt vonWarum kann ich „explodierte' Slices und reguläre Parameter in den variadischen Funktionen von Go nicht mischen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!