Wie übergibt man variable Funktionsargumente an andere Funktionen in Go?

DDD
Freigeben: 2024-11-11 19:54:02
Original
487 Leute haben es durchsucht

How do you pass variadic function arguments to other functions in Go?

Variadic Function Parameter Pass-through verstehen

Das Konzept der Variadic-Funktionen in Go ermöglicht es Funktionen, eine variable Anzahl von Argumenten zu akzeptieren. Bei der Übergabe dieser Argumente an andere Funktionen ist es jedoch entscheidend, die Parametererweiterung korrekt zu handhaben.

Problem:

Betrachten Sie die folgende Die-Funktion, die als Wrapper dient rund um fmt.Fprintf:

func Die(format string, args ...interface{}) {
    str := fmt.Sprintf(format, args)
    fmt.Fprintf(os.Stderr, "%v\n", str)
    os.Exit(1)
}
Nach dem Login kopieren

Beim Aufruf von Die("foo") wird die Ausgabe unerwartet angezeigt „foo%!(EXTRA []interface {}=[])“ statt nur „foo.“

Erklärung:

Variadic-Funktionen behandeln ihre Argumente als Scheibe eines bestimmten Typs. In der Die-Funktion ist args ein Slice vom Typ []interface{}. Bei der Übergabe an fmt.Sprintf wird es als einzelnes Argument vom Typ []interface{} behandelt und die einzelnen Werte werden nicht erweitert.

Lösung:

Zu übergeben Um die einzelnen Argumente korrekt anzuzeigen, verwenden Sie die ...-Syntax:

str := fmt.Sprintf(format, args...)
Nach dem Login kopieren

Dadurch wird das args-Slice erweitert und jeder Wert als separater Wert übergeben Argument.

Zusätzliche Informationen:

Die Go-Spezifikation verdeutlicht dieses Verhalten weiter:

"Der Typ eines variadischen Funktionsarguments ist ein Teil davon Typ der einzelnen Argumente. Der Aufruf einer variadischen Funktion ermöglicht eine implizite Konvertierung von einer Menge bereitgestellter Werte in den Slice-Typ Wenn Sie dieses Konzept verstehen, können Sie verschiedene Argumente korrekt an andere Funktionen übergeben und unerwartete Ausgaben vermeiden.

Das obige ist der detaillierte Inhalt vonWie übergibt man variable Funktionsargumente an andere Funktionen in Go?. 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