Rückkehr von einer untergeordneten Funktion innerhalb einer übergeordneten Funktion
Man kann auf eine Situation stoßen, in der man von einer übergeordneten Funktion zurückkehren möchte, wenn man a anruft Kinderfunktion. In diesem Szenario besteht das Ziel darin, die Ausführung in der übergeordneten Funktion apiEndpoint() zu beenden, wenn eine bestimmte Bedingung in der untergeordneten Funktion apiResponse() erfüllt ist.
Das Problem
Verwendung des bereitgestellten Code-Snippets:
func apiEndpoint() { if false { apiResponse("error") // Return execution in parent function // Skip execution of apiResponse("all good") } apiResponse("all good") } func apiResponse(message string) { // Returns message to user via JSON }
Die Absicht besteht darin, dass apiResponse("error") die Ausführung von beendet apiEndpoint(), sodass apiResponse("all good") nicht ausgeführt wird. Das Standardverhalten in Go besteht jedoch darin, dass eine Funktion den Ausführungsfluss außerhalb ihres Gültigkeitsbereichs nicht steuern kann.
Auflösung
Um das gewünschte Ergebnis zu erzielen, gibt es mehrere Ansätze:
1. Verwenden Sie if-Else-Anweisungen
Wenn die Bedingung einfach genug ist, kann die if-else-Struktur verwendet werden, um die explizite return-Anweisung zu vermeiden:
func apiEndpoint() { if someCondition { apiResponse("error") } else { apiResponse("all good") } }
2. Rückkehr vom Aufrufer mithilfe von Werten
Wenn beide Funktionen Werte zurückgeben, können Sie eine einzige Codezeile verwenden, um den entsprechenden Wert von der Aufruferfunktion zurückzugeben:
func apiEndpoint() int { if someCondition { return apiResponse("error") } return apiResponse("all good") } func apiResponse(message string) int { return 1 // Return an int }
Hinweis
Auch wenn Panik eine weitere Ausnahme ist, die die Ausführung stoppen kann, wird sie in diesem Zusammenhang nicht als geeignete Lösung angesehen und sollte Ausnahmefällen vorbehalten bleiben Situationen.
Das obige ist der detaillierte Inhalt vonWie kann ich von einer übergeordneten Funktion in Go zurückkehren, nachdem eine untergeordnete Funktion ausgeführt wurde?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!