Heim > Backend-Entwicklung > Golang > Wie geht Go mit der Argumentauswertung verzögerter Funktionsaufrufe um?

Wie geht Go mit der Argumentauswertung verzögerter Funktionsaufrufe um?

DDD
Freigeben: 2024-12-10 06:57:16
Original
731 Leute haben es durchsucht

How Does Go Handle Deferred Function Call Argument Evaluation?

Grundlegendes zur Auswertung verzögerter Aufrufargumente

In Go wird die „defer“-Anweisung häufig verwendet, um sicherzustellen, dass am Ende bestimmte Aktionen ausgeführt werden eine umgebende Funktion. Es ist jedoch wichtig zu beachten, dass die an den verzögerten Aufruf übergebenen Argumente nicht sofort ausgeführt werden.

Gemäß der Go-Spezifikation „werden bei jeder Ausführung einer ‚defer‘-Anweisung der Funktionswert und die Parameter für den Aufruf angezeigt werden wie üblich ausgewertet und erneut gespeichert, aber die eigentliche Funktion wird nicht aufgerufen. Die tatsächliche Ausführung der verzögerten Funktion wird jedoch verzögert, bis die umgebende Funktion abgeschlossen ist.

Beispielerklärung

Bedenken Sie den folgenden Go-Code:

In diesem Beispiel:
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")
}
Nach dem Login kopieren

Der verzögerte Funktionswert (def("defered line")) ausgewertet wird, was den Aufruf von def mit dem Argument „defered line“ beinhaltet. Dies gibt „tier ​​up“ und das Argument aus.
  • Der Rückgabewert von def, einer anonymen Funktion, wird zurückgestellt, aber noch nicht ausgeführt.
  • Der verbleibende Code in main (fmt.Println („main“)) wird ausgeführt.
  • Sobald main zurückkehrt, wird die verzögerte Funktion ausgeführt und „clean“ ausgegeben up".
  • Daher werden die Argumente des verzögerten Funktionsaufrufs (in diesem Fall „defered line") sofort ausgewertet, wenn die defer-Anweisung ausgeführt wird, wodurch die Funktion und ihre Argumente für die spätere Ausführung eingerichtet werden.

Das obige ist der detaillierte Inhalt vonWie geht Go mit der Argumentauswertung verzögerter Funktionsaufrufe um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage