首頁 >後端開發 >Golang >如何在 Golang 中同時讀取多個通道?

如何在 Golang 中同時讀取多個通道?

Patricia Arquette
Patricia Arquette原創
2024-11-07 10:31:03903瀏覽

How do you read from multiple channels simultaneously in Golang?

在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn