go 代码无法理解,望大神指点一下

lmh860628 · · 900 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

``` go package main import ( "fmt" ) func producer(nums ...int) <-chan int { out := make(chan int) go func() { defer close(out) for _, n := range nums { out <- n } }() return out } func square(inCh <-chan int) <-chan int { out := make(chan int) go func() { defer close(out) for n := range inCh { out <- n * n } }() return out } func main() { in := producer(1, 2, 3, 4) ch := square(in) for ret := range ch { fmt.Printf("%3d", ret) } } ``` 这个是go代码,可以直接执行,结果是1 4 9 16 。 也在goland里面单步跟踪了,但是还是不理解执行原理。就像问一下,这个执行过程。producer 和square 里面不是go协程吗? 还是无缓冲的,这个不应该阻塞吗?再次,如果返回了return out ,这两个函数应该结束了,我单步跟踪发现,从main里面又跳入到producer 和square 这两个函数里面执行。这个和之前接触的协程上理解不了。求大神指点一二。

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

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

900 次点击  
加入收藏 微博
7 回复  |  直到 2019-01-16 18:00:31
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传