我正在按自己的时间学习Go。通过教程。看下面的代码,无法弄清楚它如何停止执行。有人愿意帮忙吗?
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
documentation。
如果可以进行一种或多种通信,则可以通过统一的伪随机选择来选择可以进行的单个通信。否则,如果存在默认情况,则选择该情况。如果没有默认情况,则“select”语句将阻塞,直到可以进行至少一种通信为止。
一旦两个通道都无法读取,在这种情况下(因为它们已经用尽),default
将运行。 break LOOP
跳出标记的for
循环,select
进入其中,main
退出,程序终止。