Heim > Backend-Entwicklung > Golang > Können explodierte Slices und reguläre Parameter in den variadischen Funktionen von Go kombiniert werden?

Können explodierte Slices und reguläre Parameter in den variadischen Funktionen von Go kombiniert werden?

DDD
Freigeben: 2024-12-11 05:40:14
Original
845 Leute haben es durchsucht

Can Exploded Slices and Regular Parameters Be Combined in Go's Variadic Functions?

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)
}
Nach dem Login kopieren

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...))
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage