Funktionsauswertung in bedingten Anweisungen
Bedingte Anweisungen erfordern oft die Auswertung von Funktionen innerhalb ihrer Bedingungen. Die Programmiersprache Go stellt jedoch bestimmte Anforderungen, wenn versucht wird, Funktionsaufrufe als Werte in solchen Anweisungen zu verwenden. Um dies besser zu verstehen, betrachten Sie das folgende Beispiel:
package main import "fmt" func main() { if sumThis(1, 2) > sumThis(3, 4) { fmt.Println("test") } else { fmt.Println("derp") } } func sumThis(a, b int) { return a + b }
Dieses Codefragment versucht, die Ergebnisse zweier Funktionsaufrufe innerhalb einer bedingten Anweisung zu vergleichen. Die Kompilierung schlägt jedoch fehl und erzeugt den folgenden Fehler:
./test4.go:4: sumThis(1, 2) used as value ./test4.go:4: sumThis(3, 4) used as value ./test4.go:11: too many arguments to return
Der Fehler ist auf das Fehlen eines Rückgabetyps für die sumThis-Funktion zurückzuführen. Durch Weglassen des Rückgabetyps interpretiert Go die Funktion als Rückgabe von void. Wenn Sie dann versuchen, die Funktionsaufrufe als Werte in der bedingten Anweisung zu verwenden, findet der Compiler keinen Rückgabetyp und behandelt die Aufrufe als für ihre Nebenwirkungen und nicht für ihre Rückgabewerte verwendet.
Um dieses Problem zu beheben, müssen Sie muss explizit einen Rückgabetyp für Ihre Funktion deklarieren. Da die sumThis-Funktion in diesem Fall eine Ganzzahl zurückgibt, sollte ihre Signatur wie folgt lauten:
func sumThis(a, b int) int { // ... }
Wenn die richtige Funktionssignatur vorhanden ist, wird der Code erfolgreich kompiliert und vergleicht die Rückgabewerte der darin enthaltenen Funktionsaufrufe korrekt die bedingte Anweisung.
Das obige ist der detaillierte Inhalt vonWie verwende ich Funktionsaufrufe in den bedingten Anweisungen von Go richtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!