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 サイトの他の関連記事を参照してください。