Sortir d'une boucle étiquetée For depuis l'extérieur de la portée
Dans Go, il peut être difficile d'interrompre une boucle étiquetée For à partir d'un code qui existe en dehors de la portée de la boucle. Ceci est courant lorsque vous utilisez une routine go pour effectuer des tâches périodiques et que vous souhaitez terminer la boucle en fonction de certaines conditions.
Solution :
Pour y parvenir, nous pouvons employer un canal de signalisation. Voici comment procéder :
<code class="go">quit := make(chan struct{})</code>
Un canal de type struct{}{} est utilisé pour envoyer un signal indiquant que la boucle doit être rompue. Ce canal est créé en dehors de la portée de la boucle.
Lorsque la condition est remplie pour rompre la boucle, nous fermons le canal :
<code class="go">close(quit)</code>
En fermant le canal, nous signalons que la routine go doit se terminer.
À l'intérieur de la boucle étiquetée for, incorporez une instruction select pour écouter le signal du canal :
<code class="go">myLoop: for { select { case <-quit: break myLoop default: // Continue looping } }
Lorsque le canal quit est fermé, l'instruction select détecte ceci et exécute l'instruction break, sortant ainsi efficacement de la boucle.
<code class="go">go func (){ for { // Loop continues until count > 5 or quit channel is closed fmt.Println("I will print every second", count) count++ if count > 5 { close(quit) wg.Done() return } <-t.C } }()</code>
Dans cette routine go , l'instruction select n'est pas obligatoire car la boucle est déjà exécutée comme une routine go et n'a pas besoin d'être bloquée.
En suivant ces étapes, vous pouvez sortir d'une boucle étiquetée for depuis l'extérieur de la portée de la boucle dans Utilisez un canal de signalisation.
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!