Golang选择触发器



我正在学习GoLang教程选择.go

func fibonacci(c, quit chan int) {
    x, y := 0, 1
    for {
        select {
        case c <- x:
            x, y = y, x+y
        case <-quit:
            fmt.Println("quit")
            return
        }
    }
}
func main() {
    c := make(chan int)
    quit := make(chan int)
    go func() {
        for i := 0; i < 10; i++ {
            fmt.Println(<-c)
        }
        quit <- 0
    }()
    fibonacci(c, quit)
}

对于第二种情况,我知道当有东西通过退出通道时,它会被触发。但我不明白为什么第一个案例陈述也会被触发。它只是在往管道里挤。它看起来不像是某种"等待并触发"的场景。更广泛地说,判断案件陈述是否被触发的标准是什么?

在这种情况下,看起来像一些"等待并触发"的场景。只有当管道的接收器侧可以接收时,才能在无缓冲通道中发送。无缓冲通道就像集合。因此,在fmt.Println(<-c)完成打印并准备接收新值之前,c <- x无法继续。在许多可能的选择的情况下,通过统一的伪随机选择来选择情况。因此,评判标准只是一种可能性。如果许多goroutings想要从一个通道发送或接收,那么它可能会被触发,而不是罕见的情况。

最新更新