我正在关注 tour.golang.org 上的示例。
我主要理解这个例子,我唯一的问题是为什么当我们通过 0 退出频道时它会停止?不管是否传递了 0 来退出,x 总是有一个值。所以不应该选择总是落在 case 'c <- x' 上吗?
func fibonacci(c chan int, quit chan int) {
x, y := 0, 1
for {
select {
case c <- x:
x, y = y, x+y
case <-quit:
return
}
}
close(c)
}
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)
}
白猪掌柜的
相关分类