In Go können Sie mit einem verzögerten Funktionsaufruf Code ausführen, nachdem die umgebende Funktion zurückgegeben wurde. Das Verhalten verzögerter Anrufe kann jedoch verwirrend sein, wenn Sie nicht verstehen, wie mit Argumenten umgegangen wird.
Das Zitat aus „A Tour of Go“ besagt, dass „die Die Argumente des verzögerten Aufrufs werden sofort ausgewertet, der Funktionsaufruf wird jedoch erst ausgeführt, wenn die umgebende Funktion zurückkehrt. Das bedeutet:
Sehen wir uns das bereitgestellte Beispiel an:
func def(s string) func() { fmt.Println("tier up") fmt.Println(s) return func() { fmt.Println("clean up") } } func main() { defer def("defered line")() fmt.Println("main") }
Wann main() aufgerufen wird, geschieht Folgendes:
Das Verständnis des Unterschieds zwischen Argumentauswertung und Funktionsausführung ist entscheidend für die effektive Nutzung verzögerter Aufrufe in Go. Argumente werden sofort ausgewertet, wenn die Defer-Anweisung ausgeführt wird, während der Funktionskörper erst ausgeführt wird, wenn die umschließende Funktion zurückkehrt. Dadurch können Sie die Reihenfolge steuern, in der Aktionen ausgeführt werden, und potenzielle Probleme im Zusammenhang mit unerwartetem Funktionsverhalten vermeiden.
Das obige ist der detaillierte Inhalt vonGo-aufgeschobene Aufrufe: Werden Argumente sofort oder bei Funktionsausführung ausgewertet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!