Pourquoi ma Goroutine ne fonctionne-t-elle pas ?
Dans le domaine de la programmation Go, les goroutines fournissent un mécanisme puissant d'exécution simultanée. Cependant, ces goroutines peuvent parfois sembler ne pas répondre, laissant les développeurs dans un état de confusion.
Scénario :
Considérez le code Go suivant qui tente de créer une goroutine et d'envoyer messages via un canal :
<code class="go">package main import "fmt" func main(){ messages := make(chan string,3) messages <- "one" messages <- "two" messages <- "three" go func(m *chan string) { fmt.Println("Entering the goroutine...") for { fmt.Println(<- *m) } }(&messages) fmt.Println("Done!") }</code>
Lors de l'exécution de ce code, le résultat peut être surprenant :
Done!
Le problème :
Malgré en créant une goroutine, le code n'exécute jamais les instructions qu'elle contient. La raison réside dans l'arrêt du programme principal. Dans Go, les goroutines s'exécutent indépendamment de la fonction principale. Dès que le programme principal se termine, toutes les goroutines en cours d'exécution sont terminées, même si elles n'ont pas eu la chance de s'exécuter.
La solution :
Pour empêcher le goroutine ne se termine pas prématurément, le programme principal doit être maintenu en vie jusqu'à ce que la goroutine termine son travail. Il existe plusieurs approches pour y parvenir :
Recommandation :
Pour une compréhension plus complète du comportement et de la concurrence des goroutines dans Go, il est fortement recommandé de lire l'excellent article du blog Golang : "Concurrency in Go."
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!