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

我正在按自己的时间学习 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

        }

    }

}


慕莱坞森
浏览 160回答 2
2回答

烙印99

从select文档中。如果一个或多个通信可以进行,则通过统一的伪随机选择选择一个可以进行的通信。否则,如果存在默认情况,则选择该情况。如果没有默认情况,“select”语句会阻塞,直到至少有一个通信可以继续。一旦两个通道都没有准备好读取,在这种情况下,因为它们已经用尽,default将运行。break LOOP跳出被标记的for循环select内部,main退出,程序终止。

慕后森

当其他情况都没有准备好时,选择defaulta的情况。select从两个通道读取所有内容后,它们都没有准备好,因此default选择了 case,这会中断循环。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go