Éviter l'arrêt prématuré d'un programme dans les processus Go de longue durée
En Go, on peut rencontrer une situation où un programme d'exécution longue, avec sa logique exécuté dans des goroutines concurrentes, se termine prématurément lorsque la fonction principale se termine. Pour éviter ce comportement indésirable, les développeurs recherchent les meilleures pratiques pour empêcher la fonction principale de se terminer, garantissant ainsi le fonctionnement continu du programme.
Une méthode couramment utilisée consiste à créer un canal et à retarder la sortie de la fonction principale en recevoir sur cette chaîne. Cependant, cette approche présente des défis si toutes les goroutines deviennent inactives.
Au lieu de cela, une approche recommandée consiste à implémenter un mécanisme de blocage indéfini au sein de la fonction principale. En utilisant une instruction select {}, la fonction principale se bloque pour toujours, empêchant l'arrêt du programme.
Considérez la démonstration suivante :
package main import ( "fmt" "time" ) func main() { go forever() select {} // block forever } func forever() { for { fmt.Printf("%v+\n", time.Now()) time.Sleep(time.Second) } }
Dans cet exemple amélioré, la fonction principale utilise l'instruction select { } à bloquer indéfiniment, permettant aux goroutines comme Forever() de continuer leur fonctionnement sans risque d'arrêt prématuré du programme.
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!