Golang での複数のチャネルからの同時読み取り
Golang では、「任意の対 1」チャネルを作成できます。複数のゴルーチンが同じチャネルに同時に書き込むことができます。この機能を実現する方法を見てみましょう。
1 つの方法は、select ステートメントを使用することです。これにより、複数のチャネルがデータを受信するのを待つことができます。
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)
}
このゴルーチンは無限に実行され、両方のチャネルから読み取り、受信した値の合計を出力チャネルに送信します。ゴルーチンを終了するには、両方の入力チャネルを閉じる必要があります。
別のアプローチとして、次のコードを使用することもできます。
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
}
この関数は、別の「完了」チャネルを使用して、1 つのチャネルが正常に読み取られたことを通知します。ただし、このアプローチは、入力チャネルに書き込むゴルーチンを変更する必要があるため、柔軟性に欠ける可能性があります。
適切なアプローチは、アプリケーションの特定の要件によって異なります。どの方法を選択しても、Golang の同時実行機能は、複数のチャネルを同時に処理するための強力なツールを提供します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3