Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich in Go aus einer beschrifteten for-Schleife von außerhalb ihres Gültigkeitsbereichs ausbrechen?

Wie kann ich in Go aus einer beschrifteten for-Schleife von außerhalb ihres Gültigkeitsbereichs ausbrechen?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-27 03:27:02356Durchsuche

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

Aus einer beschrifteten For-Schleife von außerhalb des Gültigkeitsbereichs ausbrechen

In Go kann es schwierig sein, eine beschriftete For-Schleife aus dem Code zu unterbrechen existiert außerhalb des Gültigkeitsbereichs der Schleife. Dies kommt häufig vor, wenn eine Go-Routine zum Ausführen periodischer Aufgaben verwendet wird und die Schleife basierend auf bestimmten Bedingungen beendet werden soll.

Lösung:

Um dies zu erreichen, können wir Folgendes tun: ein Signalkanal. So geht's:

  1. Erstellen Sie einen Signalisierungskanal:
<code class="go">quit := make(chan struct{})</code>

Ein Kanal vom Typ struct{}{} wird verwendet Senden Sie ein Signal, dass die Schleife unterbrochen werden soll. Dieser Kanal wird außerhalb des Schleifenbereichs erstellt.

  1. Kanal zur Signalunterbrechung schließen:

Wenn die Bedingung zum Unterbrechen der Schleife erfüllt ist, Wir schließen den Kanal:

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

Durch das Schließen des Kanals signalisieren wir, dass die Go-Routine beendet werden soll.

  1. Ändern Sie die For-Schleife mit einer Select-Anweisung:

In die beschriftete for-Schleife eine Select-Anweisung einbauen, um auf das Signal vom Kanal zu warten:

<code class="go">myLoop:
  for {
    select {
    case <-quit:
      break myLoop
    default:
      // Continue looping
    }
  }

Wenn der Quit-Kanal geschlossen ist, erkennt die Select-Anweisung Dies führt die Break-Anweisung aus und bricht effektiv aus der Schleife aus.

  1. Rufen Sie die Go-Routine auf:
<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>

In dieser Go-Routine , die Select-Anweisung ist nicht erforderlich, da die Schleife bereits als Go-Routine ausgeführt wird und nicht blockiert werden muss.

Durch Befolgen dieser Schritte können Sie aus einer gekennzeichneten for-Schleife von außerhalb des Schleifenbereichs ausbrechen Verwenden Sie einen Signalkanal.

Das obige ist der detaillierte Inhalt vonWie kann ich in Go aus einer beschrifteten for-Schleife von außerhalb ihres Gültigkeitsbereichs ausbrechen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn