Übergabe mehrerer Rückgabewerte an variadische Funktionen in Go
Frage:
Kann eine Funktion sein Die Rückgabe mehrerer ganzzahliger Werte wird direkt an fmt.Println() zur formatierten Zeichenfolgenausgabe übergeben, ähnlich wie Python?
func temp() (int, int) { return 1, 1 } fmt.Println("first= %d and second = %d", temp()) // Not supported
Antwort:
Nein, dies wird in Go standardmäßig nicht direkt unterstützt. Gemäß der Sprachspezifikation erwartet „Calls“ einen Funktionsaufruf als einziges Argument für variadische Parameter wie ...interface{}, und Funktionen müssen mindestens einen Rückgabewert haben.
fmt.Printf(), Ermöglicht jedoch die Verwendung einer Formatzeichenfolge neben dem Variadic-Parameter, wodurch er für diese Aufgabe besser geeignet ist. Da temp() jedoch ein Tupel zurückgibt, kann es nicht direkt als ...interface{}-Argument übergeben werden.
Lösung:
Um mehrere Rückgabewerte zu übergeben In eine variadic-Funktion kann eine Utility-Wrapper-Funktion verwendet werden, um das Tupel in ein []interface{}-Slice umzuwandeln, das dann als variadic-Argument übergeben werden kann. Unten ist eine Beispielimplementierung:
func wrap(vs ...interface{}) []interface{} { return vs }
Mit dieser Wrapper-Funktion kann die temp()-Funktion jetzt an fmt.Printf() übergeben werden:
func main() { fmt.Printf("first= %v and second = %v", wrap(temp()...)...) }
Dadurch wird die ordnungsgemäß gedruckt Werte von temp().
Das obige ist der detaillierte Inhalt vonKann „fmt.Println' von Go mehrere Rückgabewerte einer Funktion direkt verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!