Variadic-Funktionsargument-Pass-Through-Problem im fmt.Fprintf-Wrapper
Dieser Artikel befasst sich mit einem Problem, das beim Erstellen eines einfachen fmt.Fprintf-Wrappers auftritt die eine variable Anzahl von Argumenten akzeptiert.
Problem: Falsche Ausgabe beim Aufruf des Wrappers
Beim Aufruf der Wrapper-Funktion Die("foo") wird eine unerwartete Ausgabe erzeugt : „foo%!(EXTRA []interface {}=[])“. Dies wirft zwei Fragen auf:
Lösung: Spread-Operator verwenden
Variadische Funktionen in Go empfangen Argumente als Slice. In diesem Fall hat die Wrapper-Funktion Die einen Parameter args vom Typ []interface{}. Wenn dieses Argument jedoch an fmt.Sprintf übergeben wird, wird es als einzelnes Argument vom Typ []interface{} behandelt.
Um dieses Problem zu lösen und jeden Wert in args als separates Argument zu übergeben, verwenden Sie den Spread-Operator (...) muss verwendet werden. Durch das Hinzufügen dieser Syntax zum fmt.Sprintf-Aufruf werden die einzelnen Werte in args erweitert und entsprechend übergeben:
str := fmt.Sprintf(format, args...)
Dieser Ansatz stellt sicher, dass die Wrapper-Funktion die Variablenargumente korrekt an fmt.Fprintf übergibt.
Das obige ist der detaillierte Inhalt vonWarum erscheint „foo%!(EXTRA []interface {}=[])', wenn ein „fmt.Fprintf'-Wrapper mit verschiedenen Argumenten aufgerufen wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!