Maison > développement back-end > Golang > 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
Libérer: 2024-10-27 03:27:02
original
486 Les gens l'ont consulté

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 :

1

<code class="go">quit := make(chan struct{})</code>

Copier après la connexion

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 :

1

<code class="go">close(quit)</code>

Copier après la connexion

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 :

1

2

3

4

5

6

7

8

9

<code class="go">myLoop:

  for {

    select {

    case <-quit:

      break myLoop

    default:

      // Continue looping

    }

  }

Copier après la connexion

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 :

1

2

3

4

5

6

7

8

9

10

11

12

13

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

Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal