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 ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-28 22:09:12860parcourir

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

Exécution de fonction différée avec log.Fatalln()

Dans Go, les fonctions différées sont exécutées au retour de la fonction environnante, même si elle se termine en raison de la panique ou de os.Exit(). Cependant, il existe des exceptions à cette règle.

log.Fatalln() et fonctions différées

Lorsqu'un programme appelle la fonction log.Fatalln(), il imprime un message d'erreur, puis quitte immédiatement le programme avec un code de sortie de 1. Surtout, log.Fatalln() appelle os.Exit(), ce qui empêche le code restant de exécution.

Implications pour les fonctions différées

Cela signifie que si une fonction différée est enregistrée après un appel à log.Fatalln(), elle ne sera pas exécutée. En effet, os.Exit() termine le programme immédiatement, sans donner au runtime la possibilité d'exécuter les fonctions différées.

Démonstration

Considérez le code suivant :

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

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

Dans cet exemple, si le premier appel log.Fatalln() est exécuté en raison d'une erreur d'ouverture de la connexion à la base de données, le différé la fonction db.Close() ne sera pas appelée car le programme se termine immédiatement après l'appel log.Fatalln().

Alternatives à log.Fatalln()

Si vous devez libérer correctement des ressources ou effectuer d'autres tâches avant la fermeture du programme, vous ne devez pas utiliser log.Fatalln(). Au lieu de cela, vous pouvez utiliser log.Println() ou imprimer le message d'erreur dans le flux d'erreur standard, puis appeler os.Exit() manuellement.

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