Heim  >  Artikel  >  Backend-Entwicklung  >  Warum erscheint „foo%!(EXTRA []interface {}=[])“, wenn ein „fmt.Fprintf“-Wrapper mit verschiedenen Argumenten aufgerufen wird?

Warum erscheint „foo%!(EXTRA []interface {}=[])“, wenn ein „fmt.Fprintf“-Wrapper mit verschiedenen Argumenten aufgerufen wird?

Susan Sarandon
Susan SarandonOriginal
2024-11-11 02:57:03130Durchsuche

Why does

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:

  • Warum erscheint dieser zusätzliche Text nach „foo“?
  • Wie erstellt man Wrapper um fmt.Fprintf richtig?

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!

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