Maison >développement back-end >Golang >Comment faire fonctionner indéfiniment la Goroutine principale d'un programme Go ?

Comment faire fonctionner indéfiniment la Goroutine principale d'un programme Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-26 21:46:11522parcourir

How to Keep a Go Program's Main Goroutine Running Indefinitely?

Maintenir la goroutine principale d'un projet Go en cours d'exécution indéfiniment

Contrairement aux fonctions principales d'autres langages de programmation, la goroutine principale de Go se ferme au retour de la fonction. Cela soulève la question : comment pouvons-nous faire fonctionner la goroutine principale indéfiniment ?

"En veille" la goroutine

Plusieurs constructions peuvent bloquer la goroutine principale sans consommer de ressources CPU :

  • Sélectionnez la déclaration sans cas ni défaut
  • Réception de un canal vide
  • Réception d'un canal nul
  • Envoi vers un canal nul
  • Verrouillage d'une synchronisation verrouillée.Mutex

Quitter la Goroutine

Quand on souhaite proposer un moyen d'arrêter, un canal peut être utilisé :

  1. Créer un canal de sortie : quit := make(chan struct{})
  2. Dans main(), bloquer sur le canal de sortie : <-quit
  3. Depuis une autre goroutine, envoyez un signal au canal de sortie lorsque vous êtes prêt à quitter : close(quit)

Dormir sans bloquer

Si nous ne souhaitons pas bloquer la goroutine principale mais simplement l'empêcher de se terminer, les constructions suivantes peuvent être utilisé :

  • Call time.Sleep() avec une durée suffisamment importante (environ 292 ans)
  • Boucle infinie sur le sommeil : pendant { time.Sleep(...) }

Remarque :

Fermeture du Quitter le canal peut terminer le programme à tout moment, même si d'autres goroutines sont en cours d'exécution. En effet, la goroutine principale revient lors de la réception du canal fermé, provoquant la fermeture du programme avant la fin des goroutines non principales.

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