Maison  >  Article  >  développement back-end  >  Comment puis-je sortir d'une boucle étiquetée for en dehors de sa portée dans Go ?

Comment puis-je sortir d'une boucle étiquetée for en dehors de sa portée dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-27 03:27:02356parcourir

How can I break out of a labeled for loop from outside its scope in Go?

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 :

  1. Créer un canal de signalisation :
<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.

  1. Fermez le canal pour rompre le signal :

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.

  1. Modifiez la boucle For avec une instruction Select :

À 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.

  1. Appelez la routine Go :
<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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn