当前位置: > > > > 同时收听多个 go 频道
来源:stackoverflow
2024-04-22 08:06:28
0浏览
收藏
各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题是《同时收听多个 go 频道》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!
问题内容
假设我有一个 go 接收通道。有没有一种方法可以让我同时收听所有内容?例如:
channels := make([]<-chan int, 0, N) // fill the slice with channels for _, channel := range channels { <-channel }
这是我能做到的最接近的事情。但是,此实现取决于切片元素的顺序。
为了清楚起见,我不需要知道 go 通道的值。我只需要知道他们都完成了。
解决方案
您可以使用sync包来创建等待组。 添加到 waitgroup 后,为每个通道启动一个 goroutine。 最后,当通道完成时,它会递减 waitgroup。呼叫者只是在等待组中等待。这是 。
package main import ( "fmt" "sync" "time" ) func main() { wg := sync.WaitGroup{} numChans := 10 chans := make([]chan interface{}, numChans) for i:=0;i<numChans;i++ { chans[i] = make(chan interface{}) wg.Add(1) go func(c chan interface{}) { defer wg.Done() <-c }(chans[i]) } //simulate closing channels go func(){ time.Sleep(time.Second) fmt.Println("closing") for _, ch := range chans{ close(ch) } }() fmt.Println("waiting") wg.Wait() }
文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《同时收听多个 go 频道》文章吧,也可关注公众号了解相关技术文章。