Kombinieren von „explodierten“ Slices und regulären Parametern in variadischen Funktionen
Die Go-Sprache ermöglicht die Verwendung variadischer Funktionen, die eine Variable akzeptieren Anzahl der Argumente. Beim Versuch, „explodierte“ Slices (als einzelne Elemente übergebene Slices) mit regulären Parametern in solchen Funktionen zu kombinieren, gibt es jedoch bestimmte Einschränkungen.
Betrachten Sie das folgende Beispiel:
func main() { stuff := []string{"baz", "bla"} foo("bar", stuff...) } func foo(s ...string) { fmt.Println(s) }
Hier Im Code gehen wir davon aus, dass wir die Elemente des Stuff-Slice einzeln an die Funktion foo übergeben. Der Compiler gibt jedoch aufgrund „zu vieler Argumente“ einen Fehler aus. Dieser Fehler tritt auf, weil Go das Mischen explodierter Slices mit regulären Parametern nicht zulässt.
Der Grund für diese Einschränkung liegt in der Art und Weise, wie variadische Argumente in Go übergeben werden. Wenn ein explodiertes Slice verwendet wird, wird ein neues Slice mit den Elementen des explodierten Slice erstellt. Wenn jedoch ein reguläres Slice mit ... übergeben wird, wird kein neues Slice erstellt. Stattdessen wird der Verweis auf das vorhandene Slice übergeben.
Im obigen Beispiel versuchen wir, den Wert eines oder mehrerer variadischer Parameter anzugeben, indem wir sowohl ein explodiertes Slice als auch einen regulären Parameter („Balken“) verwenden. . Diese Mischung von Methoden ist in der Go-Sprachspezifikation nicht zulässig.
Um dieses Problem zu beheben, muss man sich zwischen der Explosion des Slice oder der Verwendung als regulären Parameter entscheiden. Zum Beispiel:
// Explode the slice before passing to the variadic function foo("bar", stuff[0], stuff[1]) // Pass the slice as a single argument foo(append([]string{"bar"}, stuff...))
Durch das Verständnis der Einschränkungen variadischer Argumente in Go können Entwickler potenzielle Fehler beim Mischen verschiedener Parametertypen vermeiden.
Das obige ist der detaillierte Inhalt vonKönnen explodierte Slices und reguläre Parameter in den variadischen Funktionen von Go kombiniert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!