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