戈朗何时停止处理频道并退出程序



我正在自己的时间学习围棋。浏览教程。查看下面的代码,无法弄清楚它如何停止执行。有人愿意帮忙吗?

package main
import (
"fmt"
)
func main() {
ch1 := make(chan int, 2)
ch1 <- 1
ch1 <- 2
ch2 := make(chan int, 2)
ch2 <- 3
LOOP:
for {
select {
case v1 := <-ch1:
fmt.Println("chan1 val", v1)
case v2 := <-ch2:
fmt.Println("chan2 val", v2)
default:
break LOOP
}
}
}

来自select文档。

如果一个或多个通信可以继续进行

,则通过统一的伪随机选择可以继续进行的单个通信。否则,如果存在默认情况,则选择该案例。如果没有默认情况,则"select"语句将阻止,直到至少有一个通信可以继续。

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

当其他事例都未准备就绪时,将选择selectdefault事例。从两个通道读取所有内容后,它们都没有准备就绪,因此选择了default大小写,这会中断循环。

最新更新