我正在按自己的时间学习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退出,程序终止。

07-26 03:59