在Golang 中同時從多個通道讀取
在Golang 中,可以建立一個「任意對一」通道,其中多個goroutine 可以同時寫入同一個頻道。讓我們探討如何實現此功能。
一種方法是使用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>
這個goroutine 無限期運行,讀取來自兩個通道並將接收到的值的總和會傳送到輸出通道。要終止 goroutine,需要關閉兩個輸入通道。
作為替代方法,您可以使用以下程式碼:
<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」通道當一個通道已成功讀取時發出通知。但是,這種方法不太靈活,因為它需要修改寫入輸入通道的 goroutine。
適當的方法取決於應用程式的特定要求。無論您選擇哪種方法,Golang 的並發特性都提供了同時處理多個通道的強大工具。
以上是Golang如何實作多通道並發讀取?的詳細內容。更多資訊請關注PHP中文網其他相關文章!