【发布时间】:2013-12-05 12:06:15
【问题描述】:
http://play.golang.org/p/uRHG-Th_2P
我很难理解频道的概念
package main
import (
"fmt"
)
func Fibonacci(limit int, chnvar chan int) {
x, y := 0, 1
for i := 0; i < limit; i++ {
chnvar <- x
x, y = y, x+y
}
close(chnvar)
v, ok := <-chnvar
fmt.Println(v, ok)
}
func main() {
chn := make(chan int, 10)
go Fibonacci(cap(chn), chn)
for elem := range chn {
fmt.Printf("%v ", elem)
}
}
//1 1 2 3 5 8 13 21 34
1) 如何从行中获取错误值
v, ok := <-chnvar
如果没有更多的值可以获取,它会显示为 false。 如果通道关闭,也是错误的。 但是在这种情况下,通道是关闭的,但是(?)仍然得到了真正的价值。
如果我取消收盘价,它就会恐慌。
它如何以及为什么在这里返回 true?
2) 线
go Fibonacci(cap(chn), chn)
也可以在没有 goroutine 的情况下运行。 有什么区别?只是性能问题。
提前致谢
【问题讨论】:
标签: recursion concurrency go fibonacci channel