入れ子関数内で無限 for ループを利用する場合、外部スコープからループの実行を終了する際に問題が発生します。これは、スケジュールされた関数がゴルーチンとして同時に実行される場合に特に関係します。
これに対処するには、シグナリング チャネルの実装を検討してください。
<code class="go">quit := make(chan struct{})</code>
このチャネルは、ループがいつ実行されるべきかを示すフラグとして機能します。 Break.
ゴルーチン内で、満たされた場合にシグナリング チャネルを閉じる条件を注意深く監視します。
<code class="go">go func () { for { fmt.Println("I will print every second", count) count++ if count > 5 { close(quit) wg.Done() return } <-t.C } }()</code>
同時に、無限 for ループ内で、シグナリング チャネル:
<code class="go">myLoop: for { select { case <-quit: break myLoop default: fmt.Println("iteration", i) i++ } }</code>
閉じられたシグナリング チャネルを検出すると、select ステートメントはすぐにデフォルトのケースに実行を渡し、ループの終了をトリガーします。
以上がGolang の外部スコープから無限 For ループを解除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。