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
Freigeben: 2024-12-04 16:24:16
Original
275 Leute haben es durchsucht

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).
Nach dem Login kopieren

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)
}
Nach dem Login kopieren

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!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage