Maison >développement back-end >Golang >Comment puis-je empêcher la Goroutine principale d'un programme Go de se terminer prématurément ?

Comment puis-je empêcher la Goroutine principale d'un programme Go de se terminer prématurément ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-13 18:29:10151parcourir

How Do I Prevent the Main Goroutine in a Go Program from Terminating Prematurely?

Persistance de la goroutine principale dans les programmes Go

On peut se poser la question de savoir comment empêcher la goroutine principale d'un programme Go de se terminer prématurément. En d'autres termes, l'objectif est de faire fonctionner le programme indéfiniment, sauf intervention explicite de l'utilisateur.

"Mettre en veille" la goroutine principale

Il existe plusieurs approches pour faire la goroutine principale attend indéfiniment sans consommer les ressources CPU :

  • Une sélection vide déclaration :

    select {}
  • Réception d'un canal non initialisé :

    <-make(chan int)
  • Réception d'un canal nul :

    <-(chan int)(nil)
  • Envoi à zéro canal :

    (chan int)(nil) <- 0
  • Verrouillage d'une synchronisation verrouillée.Mutex :

    mu := sync.Mutex{}
    mu.Lock()
    mu.Lock()

Quitter le programme

Si un mécanisme pour mettre fin au programme est souhaité, un simple canal peut servir le objectif :

var quit = make(chan struct{})

func main() {
    // Startup code...

    // Blocking (waiting for quit signal):
    <-quit
}

// Quitting in another goroutine:
close(quit)

Dormir sans bloquer

Une approche alternative pour maintenir le programme en cours d'exécution sans bloquer la goroutine principale consiste à utiliser une longue durée de sommeil :

time.Sleep(time.Duration(1<<63 - 1))

Pour les programmes de très longue durée, une boucle de ces instructions endormies peut être utilisée :

for {
    time.Sleep(time.Duration(1<<63 - 1))
}

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