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) }
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...)
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!