ホームページ  >  記事  >  バックエンド開発  >  Golang で複数のチャネルから同時に読み取るにはどうすればよいですか?

Golang で複数のチャネルから同時に読み取るにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-07 10:31:03820ブラウズ

How do you read from multiple channels simultaneously in Golang?

Golang で複数のチャネルを同時に読み取る

Golang の世界に足を踏み入れると、任意のチャネルを作成するタスクに遭遇するかもしれません。 - 複数のゴルーチンが 1 つの宛先にフィードされる 1 つのチャネル。この記事では、Golang でこれを実現するための戦略について詳しく説明します。

シナリオ例

2 つのゴルーチン、numgen1 と numgen2 が同時に数値を生成し、それらを書き込むシナリオを考えてみましょう。それぞれチャンネル num1 と num2。目標は、num1 と num2 から受け取った数値を合計し、その結果をチャネル合計に書き込む別のプロセス addnum を作成することです。

Select ステートメントの使用

複数のチャネルから同時に読み取るには、select ステートメントを利用できます。選択ブロック内の各ケースは、読み取り対象のチャネルを表します。メッセージを受信した最初のケ​​ースは、対応するコード ブロックを実行します。

select ステートメントを使用した例を次に示します:

func main() {

  c1 := make(chan int)
  c2 := make(chan int)
  out := make(chan int)

  go func(in1, in2 <-chan int, out chan<- int) {
    for {
      sum := 0
      select {
      case sum = <-in1:
        sum += <-in2

      case sum = <-in2:
        sum += <-in1
      }
      out <- sum
    }
  }(c1, c2, out)
}

このゴルーチンは無限に実行され、チャネルから値を継続的に読み取って合計します。 c1とc2。出力チャネルは、合計を消費する手段を提供します。 goroutine を終了するには、c1 と c2 の両方を閉じてから、終了する前に終了する必要があります。

以上がGolang で複数のチャネルから同時に読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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