Maison >développement back-end >Golang >Comment puis-je exécuter des opérations de nettoyage avant la fermeture d'un programme Go ?

Comment puis-je exécuter des opérations de nettoyage avant la fermeture d'un programme Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-28 15:07:11216parcourir

How Can I Execute Cleanup Operations Before a Go Program Exits?

Exécuter des opérations après avoir quitté un programme Go

Question :

Comment peut-on exécuter des opérations à la fin de l’exécution d’un programme Go ? Ceci est particulièrement pertinent pour gérer les tâches de nettoyage ou les sorties gracieuses dans les serveurs HTTP.

Réponse :

Utilisation des signaux Unix

La gestion des actions de fin d'exécution dans Go implique l'enregistrement des signaux Unix, tels que SIGINT (généré par Ctrl-C). Ce signal avertit le runtime Go lorsque le programme doit être terminé.

Extrait de code

L'extrait de code suivant montre comment capturer le signal d'interruption et effectuer des opérations de nettoyage avant sortie :

package main

import (
    "log"
    "os"
    "os/signal"
)

func main() {
    // Create a channel to receive the interrupt signal.
    sigchan := make(chan os.Signal)
    signal.Notify(sigchan, os.Interrupt)

    // Start a goroutine to listen for the signal.
    go func() {
        <-sigchan
        log.Println("Program killed!")

        // Perform last actions and wait for all write operations to end.

        os.Exit(0)
    }()

    // Start the main program tasks.
}

Explication

  1. make(chan os.Signal) crée un canal pour recevoir les signaux Unix.
  2. signal. Notify(sigchan, os.Interrupt) enregistre le canal pour recevoir le signal SIGINT du système d'exploitation système.
  3. Une goroutine est créée pour écouter le signal sur le canal sigchan.
  4. Lorsque le signal SIGINT est reçu (par exemple, en appuyant sur Ctrl-C), la goroutine exécute les opérations de nettoyage et quitte le programme gracieusement en utilisant os.Exit(0).
  5. Pendant ce temps, le programme principal continue de s'exécuter jusqu'à ce que les tâches de nettoyage soient terminées. terminé.

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