ホームページ >バックエンド開発 >Golang >Go でラベル付きの for ループをスコープ外から抜け出すにはどうすればよいですか?

Go でラベル付きの for ループをスコープ外から抜け出すにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-27 03:27:02463ブラウズ

How can I break out of a labeled for loop from outside its scope in Go?

スコープ外からのラベル付き For ループの抜け出し

Go では、ラベル付き for ループをコードから中断するのは困難な場合があります。ループのスコープ外に存在します。これは、go ルーチンを使用して定期的なタスクを実行し、特定の条件に基づいてループを終了したい場合によく発生します。

解決策:

これを実現するには、以下を使用できます。信号チャネル。その方法は次のとおりです:

  1. シグナリング チャネルを作成します:
<code class="go">quit := make(chan struct{})</code>

タイプ struct{}{} のチャネルは、次の目的で使用されます。ループを中断する必要があるという信号を送信します。このチャネルはループのスコープ外で作成されます。

  1. シグナル ブレークのためにチャネルを閉じる:

ループをブレークする条件が満たされると、チャネルを閉じます:

<code class="go">close(quit)</code>

チャネルを閉じることで、go ルーチンを終了する必要があることを通知します。

  1. Select ステートメントで For ループを変更します:

ラベル付きの for ループ内に、チャネルからの信号をリッスンする select ステートメントを組み込みます。

<code class="go">myLoop:
  for {
    select {
    case <-quit:
      break myLoop
    default:
      // Continue looping
    }
  }

quit チャネルが閉じられると、select ステートメントは次のことを検出します。これを実行して、break ステートメントを実行し、事実上ループから抜け出します。

  1. Go ルーチンを呼び出します:
<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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。