我正在尝试使用 Go 频道并与以下来自 go 博客的函数示例混淆:
func gen(nums []int) <-chan int {
out := make(chan int)
go func() {
for _, n := range nums {
out <- n
}
close(out)
}()
fmt.Println("return statement is called ")
return out
}
主要的 :
func main() {
c := make(chan int)
c = gen([]int{2, 3, 4, 5})
// Consume the output.
// Print 2,3,4,5
fmt.Println(<-c)
fmt.Println(<-c)
fmt.Println(<-c)
fmt.Println(<-c)
}
完整代码:http : //play.golang.org/p/Qh30wzo4m0
我的疑问:
我的理解是,一旦return被调用,该函数将被终止,并且该函数内的通道不再有生命力。
该return语句只调用一次。但是out频道的内容被读取了很多次。在这种情况下,实际的执行流程是什么?
(我是并发编程的新手。)
ibeautiful
慕尼黑5688855
相关分类