在Golang 中同時讀取多個通道
當你涉足Golang 的世界時,你可能會遇到創建一個Any- to 的任務- 多個goroutine 饋送到單一目的地的一個通道。本文將深入探討在 Golang 中實現這一目標的策略。
範例場景
考慮一個場景,其中兩個 goroutine numgen1 和 numgen2 同時產生數字並將其寫入分別是通道 num1 和 num2。您的目標是建立一個單獨的進程 addnum,它將從 num1 和 num2 接收到的數字相加,並將結果寫入通道總和。
使用 Select 語句
要同時從多個通道讀取,您可以使用 select 語句。在選擇區塊中,每個 case 代表您要讀取的一個通道。第一個收到訊息的 case 會執行對應的程式碼區塊。
這裡是一個使用 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) }
這個 goroutine 會無限期地運行,不斷地從通道讀取值並求和c1 和 c2。輸出通道提供了一種消耗金額的方法。要終止 goroutine,您需要關閉 c1 和 c2,然後在退出之前關閉。
以上是如何在 Golang 中同時讀取多個通道?的詳細內容。更多資訊請關注PHP中文網其他相關文章!