簡體   English   中英

無緩沖通道上的循環范圍

[英]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++ {

實際上,這是處理這種情況的一種非常糟糕的方式。 您要求通道數等於迭代次數。

我不建議以這種方式使用通道,將通道視為能夠並發操作,這不是您在這種情況下想要做的事情!

如果您將數字單獨傳遞給例程的數量,那么無緩沖通道將按預期工作:

https://play.golang.org/p/G1b2vjTUCsV

如果通道未緩沖,則cap(c)將為零。 查看修改后的程序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM