Maison >développement back-end >Golang >Les fonctions différées s'exécutent-elles après « log.Fatalln() » dans 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!