break是break的select还是for呢?那return呢?除了做实验有什么方法可以看到这两个关键字的区别与用法
...
go func(wg *sync.WaitGroup) {
defer wg.Done()
for {
select {
case resGt := <-ch2:
if resGt > 28 {
fmt.Println("bug:lwq")
return
}
fmt.Println(resGt)
}
}
}(&wg)
...
有疑问加站长微信联系(非本文作者)

break是针对for的,直接跳出循环。 return是针对函数,直接终止运行当前函数。 select没有此类对应的关键字。 做实验已经是一个比较好直观观察到现象的方法了。
不好意思,上面说break一定是针对for跳出循环是不对的。 应该是break包在select里面就是针对select的,不是的话则是针对for的,应该是一个作用域问题
return的话不管在哪里都是直接终止函数,demo如下:
2楼 @ysh_77 谢谢回复,很详细。我再补充点注释。
后来又看了一下: select中的break写不写没有关系,因为golang在select中的case执行完毕之后会自动执行break。单独使用select中的break可用于判断条件后的提前break
select一般和for一起使用,想要在select中的case中直接跳出break,需要搭配label使用,这样比较方便简洁,demo如下: