Gestion du signal et nettoyage à l'aide de "Différer"
En programmation, il est souvent souhaitable d'effectuer des actions de nettoyage ou de gestion des erreurs lors de l'interruption d'un processus en cours d'exécution, par exemple lorsqu'un utilisateur appuie sur Ctrl C (SIGINT) pour terminer le programme. Le mot-clé "defer" fournit un moyen pratique de garantir que de telles actions sont exécutées avant la fermeture du programme.
Capturer le signal SIGINT
Pour capturer le signal SIGINT, vous peut utiliser le package os/signal, qui fournit des fonctions de gestion des signaux entrants.
package main import ( "fmt" "os" "os/signal" ) // main function func main() { gracefulExit() } // Listen for and handle Ctrl+C (SIGINT) signal func gracefulExit() { // Create a channel to receive signals on sigs := make(chan os.Signal, 1) // Register SIGINT (Ctrl+C) signal handler signal.Notify(sigs, os.Interrupt) // Start a goroutine to listen for signals go func() { sig := <-sigs fmt.Printf("Received %v signal. Cleaning up and exiting...\n", sig) // Trigger cleanup actions using "defer" defer cleanup() defer saveResults() os.Exit(0) }() // Start running the program's main logic runProgram() }
Exécution de Defer Actions
Au sein de la goroutine de gestion du signal, avant de terminer le programme, vous pouvez utiliser le mot-clé defer pour définir les actions de nettoyage qui seront exécutées dans l'ordre inverse de leur déclaration. Dans l'exemple ci-dessus, les fonctions cleanup() et saveResults() seront appelées avant la fermeture du programme.
Personnalisation du comportement de nettoyage
Les actions de nettoyage réelles qui doivent être effectuée lorsque le signal SIGINT est reçu variera en fonction des besoins spécifiques du programme. Cette flexibilité fait de la gestion et du nettoyage des signaux à l'aide du « différer » une technique polyvalente et efficace pour gérer les interruptions inattendues dans votre code.
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!