ホームページ > バックエンド開発 > Golang > Golang の外部スコープから無限 For ループを解除するにはどうすればよいですか?

Golang の外部スコープから無限 For ループを解除するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-10-26 09:37:29
オリジナル
865 人が閲覧しました

How to Break an Infinite For Loop from an External Scope in Golang?

Golang で外部から For ループを中断する

入れ子関数内で無限 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート