Table des matières
1. Utilisez signal.Notify .
2. Signaux communs à gérer
3. Fermements gracieux meilleures pratiques
4. N'oubliez pas de restaurer le comportement par défaut si nécessaire
Maison développement back-end Golang Comment gérez-vous les signaux dans une application Go?

Comment gérez-vous les signaux dans une application Go?

Aug 11, 2025 pm 08:01 PM
go Traitement du signal

La bonne façon de traiter les signaux dans les applications GO consiste à utiliser le package OS / Signal pour surveiller le signal et effectuer un arrêt élégant. 1. Utilisez Signal.Notify pour envoyer SIGINT, SIGTERM et d'autres signaux au canal; 2. Exécutez le service principal en goroutine et bloquez le signal d'attente; 3. Après avoir reçu le signal, effectuez un arrêt élégant avec le délai d'expiration via Context.withTimeout; 4. Nettoyer des ressources telles que la fermeture des connexions de la base de données et l'arrêt de la goroutine d'arrière-plan; 5. Utilisez le signal.Resine pour restaurer le comportement du signal par défaut lorsque cela est nécessaire pour vous assurer que le programme peut être terminé de manière fiable en Kubernetes et dans d'autres environnements.

Comment gérez-vous les signaux dans une application Go?

La gestion des signaux dans une application Go est essentielle pour les fermetures gracieuses, le nettoyage et la réponse aux événements de niveau OS comme SIGTERM , SIGINT ou SIGHUP . Go fournit un moyen propre et simple de travailler avec des signaux via le package os/signal .

Comment gérez-vous les signaux dans une application Go?

Voici comment vous gérez généralement les signaux en Go:

1. Utilisez signal.Notify .

L'approche principale consiste à configurer un écouteur de signal à l'aide de signal.Notify , qui envoie des signaux entrants à un canal. Cela se fait généralement dans un goroutine séparé afin qu'il ne bloque pas votre application principale.

Comment gérez-vous les signaux dans une application Go?
 package principal

importer (
    "contexte"
    "FMT"
    "enregistrer"
    "net / http"
    "OS"
    "OS / Signal"
    "Syscall"
    "temps"
)

func main () {
    // Créer un serveur (exemple avec http)
    serveur: = & http.server {addr: ": 8080"}

    // Configuration du canal de signal
    STOP: = Make (Chan OS.Signal, 1)
    Signal.notify (stop, syscall.sigint, syscall.sigterm)

    // Démarrer le serveur dans un goroutine
    aller func () {
        Si err: = server.ListenandServe (); err! = nil && err! = http.errserverclosed {
            Log.fatalf ("Server échoué:% V", err)
        }
    } ()

    fmt.println ("Le serveur fonctionne sur: 8080 ...")

    // Bloquer jusqu'à ce qu'un signal soit reçu
    <-stop
    fmt.println ("\ nshutdown signal reçu.")

    // Arrêtez gracieusement le serveur
    ctx, annuler: = context.withtimeout (context.background (), 10 * time.second)
    Déférer annuler ()

    Si err: = server.shutdown (ctx); err! = Nil {
        Log.printf ("Erreur d&#39;arrêt du serveur:% V", ERR)
    }

    fmt.println ("Le serveur s&#39;est arrêté gracieusement.")
}

2. Signaux communs à gérer

  • syscall.SIGINT - déclenché par Ctrl C (interruption).
  • syscall.SIGTERM - Signal de terminaison gracieux (utilisé par des outils d'orchestration comme Kubernetes).
  • syscall.SIGHUP - souvent utilisé pour recharger la configuration (commune dans les démons).

Vous pouvez inclure plusieurs signaux dans signal.Notify :

 Signal.notify (stop, syscall.sigint, syscall.sigter, syscall.sighup)

3. Fermements gracieux meilleures pratiques

  • Évitez os.Exit() Sauf si nécessaire - il saute le nettoyage.
  • Utilisez le contexte avec le délai d'expiration pour limiter la durée de l'arrêt.
  • Ressources de fermeture: connexions de base de données, poignées de fichiers, écouteurs de réseau.
  • Arrêtez les travailleurs de l'arrière-plan ou les Goroutines en utilisant l'annulation du contexte.

Exemple de nettoyage des tâches de fond:

Comment gérez-vous les signaux dans une application Go?
 ctx, annuler: = context.withcancel (context.background ())

// simule une tâche d&#39;arrière-plan
aller func () {
    Ticker: = Time.newTicker (2 * time.second)
    pour {
        sélectionner {
        cas <-ticker.c:
            fmt.println ("travail ...")
        cas <-ctx.done ():
            FMT.PRINTLN ("Le travailleur s&#39;est arrêté.")
            Retour
        }
    }
} ()

// plus tard, sur le signal:
<-stop
annuler () // arrêter le travailleur

4. N'oubliez pas de restaurer le comportement par défaut si nécessaire

Si vous construisez un démon de longue date ou si vous avez besoin d'arrêter temporairement d'écouter les signaux, vous pouvez utiliser signal.Reset() :

 déférer signal.reset (syscall.sigint, syscall.sigterm)

Cela restaure le comportement du signal par défaut après la sortie de votre programme.


La gestion des signaux garantit correctement que vos applications GO se comportent de manière prévisible dans les environnements de production - en particulier dans l'orchestration des conteneurs. Le motif est simple: écoutez sur un canal, bloquez jusqu'à ce qu'un signal arrive, puis nettoyez et sortez gracieusement.

Fondamentalement: configurez un canal, informez-le des signaux, attendez, puis fermez. Pas compliqué - mais facile à négliger.

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 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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment travaillez-vous avec les variables d'environnement à Golang? Comment travaillez-vous avec les variables d'environnement à Golang? Aug 19, 2025 pm 02:06 PM

Goprovidesbuilt-insupportforhandlinlinenvironmentVariblesviattheoSpackage, permettant à développer laderadead, set et manageenvironmentDataseCurely et entièrement.

Comment implémenter un cache LRU générique dans Go Comment implémenter un cache LRU générique dans Go Aug 18, 2025 am 08:31 AM

Utilisez GO Generics et Container / List pour réaliser le cache LRU en filetage; 2. Les composants principaux incluent des cartes, des listes liées bidirectionnelles et des verrous mutex; 3. Obtenir et ajouter les opérations assurer la sécurité de la concurrence à travers les verrous, avec une complexité temporelle d'O (1); 4. Lorsque le cache est plein, l'entrée inutilisée la plus longue sera automatiquement éliminée; 5. Dans l'exemple, le cache avec une capacité de 3 a réussi à éliminer le "B" le plus long inutilisé. Cette implémentation prend en charge entièrement générique, efficace et évolutif.

Quelle est la raison de la montée des pièces OKB? Une explication détaillée des facteurs de conduite stratégiques derrière la surtension des pièces OKB Quelle est la raison de la montée des pièces OKB? Une explication détaillée des facteurs de conduite stratégiques derrière la surtension des pièces OKB Aug 29, 2025 pm 03:33 PM

Quelle est la pièce OKB dans le répertoire? Qu'est-ce que cela a à voir avec la transaction OKX? OKB Currency Use Supply Moteur: Moteur stratégique de l'économie de jetons: Xlayer améliore l'OKB et la comparaison de la stratégie BNB Résumé de l'analyse des risques en août 2025, OKB OKB d'OKX Exchange a inauguré une augmentation historique. OKB a atteint un nouveau pic en 2025, en hausse de plus de 400% en seulement une semaine, perçant 250 $. Mais ce n'est pas une poussée accidentelle. Il reflète le changement réfléchi de l'équipe OKX dans le modèle de jeton et la stratégie à long terme. Qu'est-ce que OKB Coin? Qu'est-ce que cela a à voir avec la transaction OKX? OKB est OK Blockchain Foundation et

Analyser les flux RSS et ATOM dans une application Go Analyser les flux RSS et ATOM dans une application Go Aug 18, 2025 am 02:40 AM

Utilisez la bibliothèque GoFeed pour analyser facilement RSS et AtomFeed. Tout d'abord, installez la bibliothèque via gogetgithub.com/mmcdole/gofeed, puis créez une instance d'analyseur et appelez la méthode Parseurl ou Parsestring pour analyser les flux distants ou locaux. La bibliothèque reconnaîtra automatiquement le format et renverra une structure d'alimentation unifiée. Ensuite, itérez les items feed.items pour obtenir des champs standardisés tels que le titre, le lien et le temps de publication. Il est également recommandé de définir les délais d'attente du client HTTP, de gérer les erreurs d'analyse et d'utiliser les performances d'optimisation du cache pour finalement obtenir une résolution de flux simple, efficace et fiable.

Comment gérer les paniques dans un goroutine à aller Comment gérer les paniques dans un goroutine à aller Aug 24, 2025 am 01:55 AM

Tohandlepanicsingoroutines, a utilisé avec cocoverités de manière

Comparaison des performances: Java Vs. GO pour les services backend Comparaison des performances: Java Vs. GO pour les services backend Aug 14, 2025 pm 03:32 PM

GOTYPICAL OFFERSBETTERRUNTIMEPERFORMANCE AVEC LA MAINTRÉE DE PUTHROUGHTANDLOWERLATENCE, ENTERTFORI / O-HEAVYSERVICES, DUETOITSLIGHT LONDEGOROUTINESANDERFICENTSCHEDULL

Comment définissez-vous et appelez-vous une fonction dans Go? Comment définissez-vous et appelez-vous une fonction dans Go? Aug 14, 2025 pm 06:22 PM

Dans GO, la définition et l'appel des fonctions utilisent le mot-clé FUNC et la syntaxe fixe suivante, clarifiez d'abord la réponse: la définition de la fonction doit inclure le nom, le type de paramètre, le type de retour et le corps de la fonction, et passer dans des paramètres correspondants lors de l'appel; 1. Utilisez FuncFunctionName (params) returnType {} Syntaxe lors de la définition des fonctions, telles que funcadd (a, bint) int {return b}; 2. Prise en charge de plusieurs valeurs de retour, telles que FuncDivide (A, Bfloat64) (Float64, bool) {}; 3. Les fonctions d'appel utilisent directement le nom de la fonction avec des supports pour transmettre des paramètres, tels que le résultat: = add (3,5); 4. Plusieurs valeurs de retour peuvent être reçues par des variables ou

Comment utiliser GO pour construire des applications de blockchain Comment utiliser GO pour construire des applications de blockchain Aug 17, 2025 am 03:04 AM

Pour commencer à construire des applications de blockchain en utilisant GO, vous devez d'abord maîtriser les concepts principaux de la blockchain, 1. Comprendre les blocs, le hachage, l'immuabilité, le mécanisme de consensus, le réseau P2P et les signatures numériques; 2. Installez GO et initialisez les projets et utilisez des modules GO pour gérer les dépendances; 3. Construisez une blockchain simple pour apprendre les principes en définissant la structure du bloc, en mettant en œuvre le hachage SHA-256, en créant des tranches de blockchain, en générant de nouveaux blocs et une logique de vérification; 4. Utilisez des cadres et des bibliothèques matures telles que Cosmossdk, Tendermintcore, Go-éthereum ou Badger dans le développement réel pour éviter les roues en double; 5. Utilisez GOROUTINE et GO-NET / HTTP ou Gorilla / Websocke dans le développement réel; 5. Utilisez GOroutine et Net / HTTP ou Gorilla / Websocke

See all articles