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:
<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.
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.
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.
<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!