我正在自己的时间学习围棋。浏览教程。查看下面的代码,无法弄清楚它如何停止执行。有人愿意帮忙吗?
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
退出,程序终止。
当其他事例都未准备就绪时,将选择select
的default
事例。从两个通道读取所有内容后,它们都没有准备就绪,因此选择了default
大小写,这会中断循环。