Golang での複数のチャネルからの同時読み取り
Golang では、「任意の対 1」チャネルを作成できます。複数のゴルーチンが同じチャネルに同時に書き込むことができます。この機能を実現する方法を見てみましょう。
1 つのアプローチは、select ステートメントを使用することです。これにより、複数のチャネルがデータを受信するのを待機できます。
<code class="go">func main() { // Create input channels c1 := make(chan int) c2 := make(chan int) // Create output channel out := make(chan int) // Start a goroutine that reads from both input channels and sums the received values 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) }</code>
このゴルーチンは、読み取りをしながら無期限に実行されます。両方のチャネルから受信し、受信した値の合計を出力チャネルに送信します。ゴルーチンを終了するには、両方の入力チャネルを閉じる必要があります。
別のアプローチとして、次のコードを使用できます。
<code class="go">func addnum(num1, num2, sum chan int) { done := make(chan bool) go func() { n1 := <-num1 done <- true // Signal completion of one channel read }() n2 := <-num2 // Read from the other channel <-done // Wait for the first read to complete sum <- n1 + n2 }</code>
この関数は別の「done」チャネルを使用します。 1 つのチャネルが正常に読み取られたときに通知します。ただし、このアプローチは、入力チャネルに書き込むゴルーチンを変更する必要があるため、柔軟性に欠ける可能性があります。
適切なアプローチは、アプリケーションの特定の要件によって異なります。どの方法を選択しても、Golang の同時実行機能は、複数のチャネルを同時に処理するための強力なツールを提供します。
以上がGolang で複数のチャネルからの同時読み取りを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。