Heim >Backend-Entwicklung >Golang >Werden verzögerte Funktionen nach „log.Fatalln' in Go ausgeführt?

Werden verzögerte Funktionen nach „log.Fatalln' in Go ausgeführt?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-04 16:24:16296Durchsuche

Do Deferred Functions Execute After `log.Fatalln` in Go?

Log.Fatalln und verzögerte Funktionsausführung

In Go-Programmen werden verzögerte Funktionen automatisch aufgerufen, wenn die einschließende Funktion zurückkehrt. Es stellt sich jedoch häufig die Frage: Werden verzögerte Funktionen ausgeführt, wenn die Funktion log.Fatalln aufgerufen wird?

Log.Fatalln verstehen

Die Funktion log.Fatalln ist Mitglied des Standard-Go-Protokollierungspakets. Es protokolliert die bereitgestellte Nachricht und ruft dann sofort os.Exit(1) auf, um das Programm zu beenden. Die os.Exit-Funktion wiederum verhindert die Ausführung verzögerter Funktionen.

Verzögerte Funktionsausführung im Falle von log.Fatalln

Daher ist die Antwort auf die Die Frage ist Nein. Verzögerte Funktionen werden nicht ausgeführt, wenn log.Fatalln aufgerufen wird. Dies liegt daran, dass log.Fatalln das Programm abrupt beendet und die Ausführung verzögerter Funktionen umgeht.

Dieses Verhalten ist in der Beschreibung von log.Fatal dokumentiert, der Funktion, die log.Fatalln entspricht:

Fatal is equivalent to Print() followed by a call to os.Exit(1).

Praktische Demonstration

Der folgende Code demonstriert dies Verhalten:

db, err := sql.Open("postgres", "…")
if err != nil {
    log.Fatalln(err)
}
defer db.Close()

tpl, err := template.ParseGlob("")
if err != nil {
    log.Fatalln(err)
}

Wenn template.ParseGlob("") einen Fehler zurückgibt, wird der Aufruf von db.Close() nicht ausgeführt, da log.Fatalln das Programm beendet, bevor diese Zeile erreicht wird.

Alternativer Ansatz

Wenn Sie sicherstellen müssen, dass Bereinigungsaufgaben ausgeführt werden, bevor das Programm beendet wird, sollten Sie dies tun Erwägen Sie die Verwendung anderer Protokollierungsfunktionen wie log.Print oder log.Println, die das Programm nicht beenden.

Das obige ist der detaillierte Inhalt vonWerden verzögerte Funktionen nach „log.Fatalln' in Go 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