为了账号安全,请及时绑定邮箱和手机立即绑定

golang什么时候停止处理频道并退出程序

golang什么时候停止处理频道并退出程序

Go
慕莱坞森 2022-06-06 14:46:23
我正在按自己的时间学习 Go。通过教程。查看下面的代码,无法弄清楚它是如何停止执行的。有人愿意帮忙吗?package mainimport (    "fmt")func main() {    ch1 := make(chan int, 2)    ch1 <- 1    ch1 <- 2    ch2 := make(chan int, 2)    ch2 <- 3LOOP:    for {        select {        case v1 := <-ch1:            fmt.Println("chan1 val", v1)        case v2 := <-ch2:            fmt.Println("chan2 val", v2)        default:            break LOOP        }    }}
查看完整描述

2 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

select文档中。

如果一个或多个通信可以进行,则通过统一的伪随机选择选择一个可以进行的通信。否则,如果存在默认情况,则选择该情况。如果没有默认情况,“select”语句会阻塞,直到至少有一个通信可以继续。

一旦两个通道都没有准备好读取,在这种情况下,因为它们已经用尽,default将运行。break LOOP跳出被标记的for循环select内部,main退出,程序终止。


查看完整回答
反对 回复 2022-06-06
?
慕后森

TA贡献1802条经验 获得超5个赞

当其他情况都没有准备好时,选择defaulta的情况。select从两个通道读取所有内容后,它们都没有准备好,因此default选择了 case,这会中断循环。



查看完整回答
反对 回复 2022-06-06
  • 2 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信