Hintergrund:
Go-Funktionen können mehrere Werte zurückgeben, aber Bei standardmäßigen variadischen Funktionsaufrufen ist die direkte Übergabe dieser Werte nicht möglich. In diesem Artikel wird eine Methode untersucht, um dies mithilfe einer benutzerdefinierten Wrapper-Funktion zu erreichen.
Problem:
Stellen Sie sich eine Funktion vor, die zwei ganzzahlige Werte zurückgibt:
func temp() (int, int) { return 1, 1 }
Wir Ich möchte diese Rückgabewerte an die variadic Printf-Funktion übergeben, um sie mithilfe einer Zeichenfolge zu drucken Formatierung:
fmt.Printf("first= %d and second = %d", temp()) // Error
Lösung:
1. Direkter Ansatz (nicht unterstützt):
Die Standard-Funktionsaufrufsyntax unterstützt nicht die Übergabe mehrerer Rückgabewerte an eine variadische Funktion. Dies liegt daran, dass variadische Parameter die letzten Parameter in einer Funktionssignatur sein müssen.
2. Rückgabewerte umschließen:
Wir können eine Wrapper-Funktion erstellen, die die Rückgabewerte einer beliebigen Funktion in ein []Interface{}-Slice umwandelt. Die variadic Printf-Funktion kann dieses Slice dann als Argumente akzeptieren.
func wrap(vs ...interface{}) []interface{} { return vs }
Verwendung:
Mithilfe der Wrap-Funktion können wir nun die Rückgabewerte unserer temporären Funktion an übergeben Printf:
fmt.Printf("first= %d and second = %d", wrap(temp()...)...)
Zusätzlich Hinweise:
Das obige ist der detaillierte Inhalt vonWie übergebe ich mehrere Rückgabewerte einer Go-Funktion an eine variadische Funktion?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!