我最近开始使用 go,我对这个程序的执行顺序感到非常困惑。我希望我不是在这里问非常琐碎的问题。
这基本上是#69在golang游,与一些的println我已经插入; 链接到操场:http://play.golang.org/p/PXDlD3EA2f
func fibonacci(c, quit chan int) {
x, y := 0, 1
fmt.Println("Inside the fibonacci")
for {
select {
case c <- x:
fmt.Println("Inside the for, first case, before reassigning ", x, y)
x, y = y, x+y
fmt.Println("Inside the for, first case, after reassigning ", x, y)
case <-quit:
fmt.Println("quit")
return
}
}
}
func main() {
fmt.Println("Begin of Main")
c := make(chan int)
quit := make(chan int)
fmt.Println("Before gonig to the func")
go func() {
fmt.Println("Inside go routine")
fmt.Println("Inside go routine... again")
for i := 0; i < 10; i++ {
fmt.Println("Inside go routine and the for, before printing the channel")
fmt.Println(<-c)
}
quit <- 0
}()
fmt.Println("Before calling to fibonacci")
fibonacci(c, quit)
fmt.Println("Closing")
}
在非常详细的输出我得到(见下附图片),有一对夫妇的事情,我不明白:
为什么是“里面的斐波那契”线在走程序的问题之前?这是因为go命令之后,编译器只是阅读在同一时间内FUNC和斐波那契?
怎么办斐波那契和FUNC互动?func 没有改变通道 c,那么为什么斐波那契会做出反应呢?谁在改变C吗?
为什么在斐波那契里面每次都有 5 个打印在一起?诚信我只有2个期待。
该功能的输出:
HUX布斯
相关分类