Casser une boucle for depuis l'extérieur de sa portée dans Golang
Lors de la gestion de boucles for infinies, la nécessité de les terminer de l'extérieur de leur portée peut surgir. Dans Golang, l'utilisation d'étiquettes avec des boucles permet cette fonctionnalité. Cependant, une limitation survient lorsque l'on tente de rompre la boucle à partir d'un goroutine distinct en raison de contraintes de portée.
Solution : utiliser des canaux de signal
Pour surmonter ce problème, la solution réside dans l’utilisation d’un canal de signal. Un canal est un mécanisme de communication dans Golang qui permet l'échange de données entre goroutines. Lorsque vous souhaitez rompre une boucle en dehors de sa portée, suivez ces étapes :
Créez un canal de signal :
<code class="go">quit := make(chan struct{})</code>
Fermez le canal de la goroutine :
Au sein de la goroutine chargée de rompre la boucle, fermez le canal de signal une fois la condition souhaitée remplie :
<code class="go">close(quit)</code>
Écoutez le signal dans la boucle :
À l'intérieur de la boucle for infinie, utilisez une instruction select pour écouter le canal fermé. Lorsque le canal est fermé, il reviendra immédiatement, permettant à la boucle de se rompre :
<code class="go">myLoop: for { select { case <-quit: break myLoop default: fmt.Println("iteration", i) i++ } }</code>
En implémentant cette solution, vous pouvez contrôler efficacement l'exécution d'une boucle for à partir d'un externe goroutine, la brisant en douceur lorsque certaines conditions sont remplies.
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!