Maison > développement back-end > Golang > Comment « différer » garantit-il la sortie propre du programme sur les signaux SIGINT en Go ?

Comment « différer » garantit-il la sortie propre du programme sur les signaux SIGINT en Go ?

Linda Hamilton
Libérer: 2024-12-25 01:20:09
original
190 Les gens l'ont consulté

How Can

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

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!

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