Maison >développement back-end >Golang >Les fonctions différées s'exécutent-elles après « log.Fatalln » dans Go ?

Les fonctions différées s'exécutent-elles après « log.Fatalln » dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-04 16:24:16315parcourir

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

Log.Fatalln et exécution de fonctions différées

Dans les programmes Go, les fonctions différées sont automatiquement appelées au retour de la fonction englobante. Cependant, une question courante se pose : les fonctions différées sont-elles exécutées lorsque la fonction log.Fatalln est invoquée ?

Comprendre log.Fatalln

La fonction log.Fatalln est membre du package de journalisation Go standard. Il enregistre le message fourni, puis appelle immédiatement os.Exit(1) pour terminer le programme. La fonction os.Exit, à son tour, empêche l'exécution de toute fonction différée.

Exécution de fonction différée en cas de log.Fatalln

Par conséquent, la réponse à la question la question est non. Les fonctions différées ne sont pas exécutées lorsque log.Fatalln est appelé. En effet, log.Fatalln termine brusquement le programme, en contournant l'exécution des fonctions différées.

Ce comportement est documenté dans la description de log.Fatal, la fonction équivalente à log.Fatalln :

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

Démonstration pratique

Le code suivant le démontre comportement :

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

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

Si template.ParseGlob("") renvoie une erreur, l'appel à db.Close() ne sera pas exécuté car log.Fatalln terminera le programme avant d'atteindre cette ligne.

Approche alternative

Si vous devez vous assurer que les tâches de nettoyage sont effectuées avant la fin du programme, vous devriez envisager d'utiliser d'autres fonctions de journalisation, telles que log.Print ou log.Println, qui ne terminent pas le programme.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn