谁给解释解释这段的代码的执行顺序,说下为什么是这样的。。。。

mu_fan · 2016-11-29 09:07:54 · 1347 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2016-11-29 09:07:54 的主题,其中的信息可能已经有所发展或是发生改变。

package main

import "fmt"

func fibonacci(c, quit chan int) { x, y := 1, 1 for { select { case c <- x: x, y = y, x+y case <-quit: fmt.Println("quit") return } } } func main() { c := make(chan int) quit := make(chan int) go func() { for i := 0; i < 10; i++ { fmt.Println(<-c) } quit <- 0 }() fibonacci(c, quit) }

aaa.png


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1347 次点击  
加入收藏 微博
5 回复  |  直到 2016-11-30 01:47:51
MR_bai
MR_bai · #1 · 8年之前

这个是example里面的代码吧。程序从mian开始,走到20行开了一个协程,然后直接就走26行去了,调用函数fibonacci,在这个函数中一个for然后不断在里面跑,等着协程通过通道把值给过来,当通道quit给值过来的时候return,fibonacci函数返回,程序结束。这么说应该明白吧

MR_bai
MR_bai · #2 · 8年之前

接触go不到2周,属于学习摸索阶段,如果有错的话希望楼下的大神轻喷

mu_fan
mu_fan · #3 · 8年之前
MR_baiMR_bai #1 回复

这个是example里面的代码吧。程序从mian开始,走到20行开了一个协程,然后直接就走26行去了,调用函数fibonacci,在这个函数中一个for然后不断在里面跑,等着协程通过通道把值给过来,当通道quit给值过来的时候return,fibonacci函数返回,程序结束。这么说应该明白吧

那这个协成中的for循环 和 fibonacci 函数中的for循环 是怎么交叉执行的呢

MR_bai
MR_bai · #4 · 8年之前
MR_bai
MR_bai · #5 · 8年之前
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传