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!