为了账号安全,请及时绑定邮箱和手机立即绑定

无缓冲通道上的循环范围

无缓冲通道上的循环范围

Go
猛跑小猪 2022-06-01 16:16:17
我是 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


查看完整回答
反对 回复 2022-06-01
?
狐的传说

TA贡献1804条经验 获得超3个赞

cap(c)如果通道未缓冲,则为零。查看修改后的程序


查看完整回答
反对 回复 2022-06-01
  • 2 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信