我有一些问题...关于缓冲频道
一季度。
那为什么 NonBuffered 从不输出 TRUE 值呢?
这是否意味着无缓冲通道总是关闭的?那么为什么无缓冲通道仍然产生正确的斐波那契计算结果呢?
Q2。
为什么 NonBuffered 输出像下面这样在中间被切断?
0 1 1 2 NB value: 0
NB ok: false
3
它应该与 goroutine 有关,但为什么会这样?
很难理解,因为如果我缓冲这个通道,我会得到真正的价值,但是对于无缓冲的通道,我只会得到错误......
请查看以下链接。
http://play.golang.org/p/O2Th61DfEY
package main
import "fmt"
func main() {
ch := make(chan int)
go NB(5, ch)
for i := range ch {
fmt.Printf("%d ", i)
}
/*
0 1 1 2 NON_Buffered value: 0
NON_Buffered ok: false
3
*/
fmt.Println()
value, ok := <-ch
fmt.Println("MAIN = NB value:", value)
fmt.Println("MAIN = NB ok:", ok)
}
func NB(n int, ch chan int) {
x, y := 0, 1
for i := 0; i < n; i++ {
ch <- x
x, y = y, x+y
}
close(ch)
value, ok := <-ch
fmt.Println("NB value:", value)
fmt.Println("NB ok:", ok)
}
非常感谢!
喵喔喔
杨魅力
相关分类