Heim >Backend-Entwicklung >Golang >Wann wird Golang Defer ausgeführt?

Wann wird Golang Defer ausgeführt?

(*-*)浩
(*-*)浩Original
2019-12-03 10:00:452618Durchsuche

Wann wird Golang Defer ausgeführt?

Golang verfügt über eine spezielle Steueranweisung, nämlich defer. Die defer-Anweisung wird verwendet, um den Aufruf der angegebenen Funktion zu verzögern, z. B. die Freigabe von Ressourcen usw. Sie wird ausgeführt das Ende der Funktion, aber Bevor wir zurückkehren , schauen wir uns zunächst den Code an, um ein kurzes Verständnis zu erhalten: (Empfohlenes Lernen: go)

package main

func main() {
    test()
}func test() {
    println("test1")    defer func() {
        println("defer test2")
    }()
    println("test3")
}

Die Ausführung Die Ergebnisse lauten wie folgt:

test1
test3
defer test2

Es ist klar, dass die Funktion mit Verzögerung zuletzt ausgeführt wird

Ändern Sie nun den Code, um den Code in Panik zu versetzen, wenn eine Ausnahme ausgelöst wird , wird die Defer-Funktion weiterhin ausgeführt?

package main

func main() {
    test()
}func test() {

    println("test1")
        panic("panic")    defer func() {
        println("defer test2")
    }()
    
    println("test3")
}

Ausgabe

test1
panic: panic
Process finished with exit code 2

Die Verzögerungsfunktion wird nicht ausgeführt. Das liegt daran, dass Panik vor der Verzögerungsfunktion liegt. Ändern Sie den Code wie folgt:

package main

func main() {
    test()
}func test() {

    println("test1")    defer func() {
        println("defer test2")
    }()
    panic("panic")
    println("test3")
}

Ausgabe

test1
defer test2
panic: panic

Die Verzögerungsfunktion wird ausgeführt, und Sie kann Panic sehen Die verzögerte Funktion kann nicht vor der verzögerten Funktion ausgeführt werden, schließlich wird eine Ausnahme ausgelöst.

Das obige ist der detaillierte Inhalt vonWann wird Golang Defer ausgeführt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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