我执行了上面的代码,其中有选择:
func fibonacci(c, quit chan int) {
x, y := 0, 1
for {
select {
case c <- x:
fmt.Printf("x = %d, y = %d \n", x, y)
x, y = y, x+y
case <-quit:
//fmt.Println(<-c)
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)
}
我的问题是为什么选择在第10次迭代时停止?c <- x运算不是总是可能的,而且应该计算斐波那契数到无穷大吗?
1条答案
按热度按时间koaltpgm1#
通道
c
未缓冲,因此c <- x
只能在存在并发<- c
时继续。此外,如果
c
使用足够大的缓冲区进行缓冲,则select
不会总是选择它,因为select
是随机选择的。