[英]Range for loop over an unBuffered Channel
我是 golang 的新手,正在學習 gotour 。 我有以下代碼可以完美運行。
package main
import (
"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)
}
}
但是當我使用無緩沖通道而不是緩沖通道時,我沒有得到任何 output,為什么會這樣?
當您將 cap(c) 傳遞給斐波那契 function 時,傳遞了什么值? 在緩沖通道上n == 5
,在非緩沖通道上n == 0
和你的 for 循環
for i := 0; i < 0; i++ {
實際上,這是處理這種情況的一種非常糟糕的方式。 您要求通道數等於迭代次數。
我不建議以這種方式使用通道,將通道視為能夠並發操作,這不是您在這種情況下想要做的事情!
如果您將數字單獨傳遞給例程的數量,那么無緩沖通道將按預期工作:
如果通道未緩沖,則cap(c)
將為零。 查看修改后的程序
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.