伙计们,我想知道如果只使用一种情况(我的频道)并用给定频道的结尾表示结束,是在频道范围内使用还是使用select更好?
给出示例:
go func() {
for v := range ch {
// do some stuff
}
}()
go func() {
for {
select {
case v, ok := <-ch:
if !ok {
return
}
// do some stuff
}
}
}()
哪种解决方案是首选,为什么?请考虑这样的事实:goroutines可能会产生很多次(许多工人)。
答案 0 :(得分:0)
除非选择的另一个分支,否则使用以下命令:
for v := range ch {
// do some stuff
}
该代码比问题中显示的for / select更简单易懂。
如果由于某种原因需要在循环内进行接收,请使用以下代码:
for {
// do some stuff
v, ok := <-ch
if !ok {
break
}
// do some other stuff
}
根据经验,应避免使用单个分支选择语句。具有单个分支的选择在功能上与单独分支相同。