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
Libérer: 2024-12-04 16:24:16
original
218 Les gens l'ont consulté

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).
Copier après la connexion

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)
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal