我是 golang 的新手,正在學(xué)習(xí) gotour。我有以下代碼可以完美運(yùn)行。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) }}但是當(dāng)我使用無緩沖通道而不是緩沖通道時(shí),我沒有得到任何輸出,為什么會這樣?
2 回答

四季花海
TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊
當(dāng)您將 cap(c) 傳遞給斐波那契函數(shù)時(shí),傳遞的是什么值?在緩沖通道上n == 5
, 在無緩沖通道上n == 0
和你的 for 循環(huán)
for i := 0; i < 0; i++ {
實(shí)際上,這是處理這種情況的一種非常糟糕的方式。您要求通道數(shù)等于迭代次數(shù)。
我不建議以這種方式使用通道,將通道視為能夠并發(fā)操作,這不是您在這種情況下想要做的事情!
如果您將數(shù)字單獨(dú)傳遞給例程的數(shù)量,那么無緩沖通道將按預(yù)期工作:
https://play.golang.org/p/G1b2vjTUCsV
- 2 回答
- 0 關(guān)注
- 121 瀏覽
添加回答
舉報(bào)
0/150
提交
取消