在某些场景下我们需要同时从多个通道接收数据。通道在接收数据时,如果没有数据可以接收发生阻塞。
你也许会写出代码使用遍历的方式来实现:
for {
data,ok := <-ch1
data,ok := <-ch2
}
这种方式虽然可以实现从多个channel接收值的需求,但是运行性能会差很多。为了应对这种场景,Go内置了select
关键字,可以同时响应多个通道的操作。
select
的使用类似于switch语句,它有一些列case分支和一个默认的分支。每个case会对应一个通道的通信(接收或发送)过程。select
会一直等待,直到某个case
的通信操作完成时,就会执行case
分支对应的语句。
具体格式如下:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)