Externes Anhalten der Ausführung einer For-Schleife in Go
In Go kann es vorkommen, dass Sie die Ausführung einer For-Schleife beenden müssen von außerhalb seines Geltungsbereichs. Beispielsweise kann es sein, dass Sie eine lange Schleife haben, die unterbrochen werden muss, wenn eine bestimmte Bedingung erfüllt ist.
Um dies zu erreichen, können Sie einen Signalkanal nutzen. So funktioniert es:
Erstellen eines Signalisierungskanals
<code class="go">quit := make(chan struct{}{})</code>
Diese Zeile erstellt einen Kanal mit einer leeren Struktur als Werttyp. Es wird verwendet, um der Schleife das Anhalten zu signalisieren.
Schließen des Kanals
Innerhalb der Goroutine, die die Schleife ausführt, können Sie die Schließfunktion verwenden, um die zu schließen Signalisierungskanal, wenn die gewünschte Bedingung erfüllt ist:
<code class="go">if count > 5 { close(quit) wg.Done() return }</code>
Lesen vom geschlossenen Kanal
Wenn der Quit-Kanal geschlossen ist, kehrt der Messwert von ihm sofort mit einer Null zurück Wert. Dieses Verhalten wird in der äußeren Schleife ausgenutzt. Standardmäßig ist das Lesen aus einem geschlossenen Kanal auf unbestimmte Zeit blockiert. Dies kann jedoch mit einer Select-Anweisung umgangen werden:
<code class="go">myLoop: for { select { case <-quit: break myLoop default: fmt.Println("iteration", i) i++ } }</code>
In dieser Select-Anweisung setzt der Standardfall die Schleifeniteration wie erwartet fort. Wenn der Quit-Kanal geschlossen wird, ist der erste Fall erfüllt, wodurch die Schleife sofort unterbrochen wird.
Durch die Verwendung eines Signalkanals können Sie die Ausführung einer for-Schleife von einer externen Funktion oder Goroutine bei Bedarf effektiv stoppen , was eine größere Flexibilität und Kontrolle über Ihre Codeausführung gewährleistet.
Das obige ist der detaillierte Inhalt vonWie kann man eine Go-For-Schleife extern anhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!