我是 golang 的新手,正在学习 gotour。我有以下代码可以完美运行。package mainimport ( "fmt")func fibonacci(n int, c chan int) { x, y := 0, 1 for i := 0; i < n; i++ { c <- x x, y = y, x+y } close(c)}func main() { c := make(chan int, 5)// c := make(chan int) //doesn't work, why ? go fibonacci(cap(c), c) for i := range c { fmt.Println(i) }}但是当我使用无缓冲通道而不是缓冲通道时,我没有得到任何输出,为什么会这样?
2 回答
四季花海
TA贡献1811条经验 获得超5个赞
当您将 cap(c) 传递给斐波那契函数时,传递的是什么值?在缓冲通道上n == 5
, 在无缓冲通道上n == 0
和你的 for 循环
for i := 0; i < 0; i++ {
实际上,这是处理这种情况的一种非常糟糕的方式。您要求通道数等于迭代次数。
我不建议以这种方式使用通道,将通道视为能够并发操作,这不是您在这种情况下想要做的事情!
如果您将数字单独传递给例程的数量,那么无缓冲通道将按预期工作:
https://play.golang.org/p/G1b2vjTUCsV
- 2 回答
- 0 关注
- 96 浏览
添加回答
举报
0/150
提交
取消