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!