Heim >Backend-Entwicklung >Golang >Kann „fmt.Println' von Go mehrere Rückgabewerte einer Funktion direkt verarbeiten?

Kann „fmt.Println' von Go mehrere Rückgabewerte einer Funktion direkt verarbeiten?

Susan Sarandon
Susan SarandonOriginal
2024-12-15 07:57:14285Durchsuche

Can Go's `fmt.Println` Handle Multiple Return Values from a Function Directly?

Ü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!

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