Heim >Backend-Entwicklung >Golang >Können Go Variadic-Funktionen Aufzählungsargumente und vorhandene Slices mischen?

Können Go Variadic-Funktionen Aufzählungsargumente und vorhandene Slices mischen?

DDD
DDDOriginal
2024-12-13 07:22:12913Durchsuche

Can Go Variadic Functions Mix Enumerated Arguments and Existing Slices?

Mischen von „explodierten“ Slices und regulären Parametern in variadischen Funktionen

In Go ermöglichen variadische Funktionen eine beliebige Anzahl von Argumenten. Es ist jedoch nicht möglich, bei der Angabe der Argumente sowohl Aufzählungselemente als auch vorhandene Slices zu kombinieren.

Variadic-Argument-Syntax

Der an einen Variadic-Parameter übergebene Wert kann entweder sein angegeben durch:

  1. Aufzählung einzelner Elemente: func(arg1, arg2, arg3 ...string) {}
  2. Verwenden eines vorhandenen Slice: func(s []string) {}

Mischen von Aufzählungselementen und Slices

Das Folgende Code lässt sich nicht kompilieren:

func main() {
    stuff := []string{"baz", "bla"}
    foo("bar", stuff...) // compile error: too many arguments
}

func foo(s ...string) {}

Das liegt daran, dass Go das Mischen der beiden Syntaxen nicht zulässt. Beim Aufzählen einzelner Elemente wird ein neues Slice erstellt. Bei Verwendung eines vorhandenen Slice wird dasselbe Slice als variadischer Parameter verwendet.

Grund für die Einschränkung

Die Einschränkung ist auf die Art und Weise zurückzuführen, wie Go variadische Argumente verarbeitet. Beim Aufzählen von Elementen wird ein neues Slice erstellt, um die Werte zu speichern. Wenn jedoch ein bestehender Slice übergeben wird, wird kein neuer Slice erstellt. Stattdessen wird das übergebene Slice direkt dem variadischen Parameter zugewiesen. Das Mischen der beiden würde die Zuweisung eines neuen Slice erfordern, was derzeit nicht unterstützt wird.

Das obige ist der detaillierte Inhalt vonKönnen Go Variadic-Funktionen Aufzählungsargumente und vorhandene Slices mischen?. 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