``` 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 这两个函数里面执行。这个和之前接触的协程上理解不了。求大神指点一二。
有疑问加站长微信联系(非本文作者)