スコープ外からのラベル付き For ループの抜け出し
Go では、ラベル付き for ループをコードから中断するのは困難な場合があります。ループのスコープ外に存在します。これは、go ルーチンを使用して定期的なタスクを実行し、特定の条件に基づいてループを終了したい場合によく発生します。
解決策:
これを実現するには、以下を使用できます。信号チャネル。その方法は次のとおりです:
<code class="go">quit := make(chan struct{})</code>
タイプ struct{}{} のチャネルは、次の目的で使用されます。ループを中断する必要があるという信号を送信します。このチャネルはループのスコープ外で作成されます。
ループをブレークする条件が満たされると、チャネルを閉じます:
<code class="go">close(quit)</code>
チャネルを閉じることで、go ルーチンを終了する必要があることを通知します。
ラベル付きの for ループ内に、チャネルからの信号をリッスンする select ステートメントを組み込みます。
<code class="go">myLoop: for { select { case <-quit: break myLoop default: // Continue looping } }
quit チャネルが閉じられると、select ステートメントは次のことを検出します。これを実行して、break ステートメントを実行し、事実上ループから抜け出します。
<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>
この go ルーチン内、ループはすでに go ルーチンとして実行されており、ブロックする必要がないため、select ステートメントは必要ありません。
これらの手順に従うことで、ループのスコープ外からラベル付き for ループを抜け出すことができます。シグナリング チャネルを使用してください。
以上がGo でラベル付きの for ループをスコープ外から抜け出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。