我正在查看https://blog.golang.org/pipelines中的示例:
func main() {
in := gen(2, 3)
// Distribute the sq work across two goroutines that both read from in.
c1 := sq(in)
// When does this line below execute and what is in `in`?
c2 := sq(in)
// Consume the merged output from c1 and c2.
for n := range merge(c1, c2) {
fmt.Println(n) // 4 then 9, or 9 then 4
}
}
c2 := sq(in)
什么时候开始?正如我所理解的那样,它不会在前一行完成时执行,而是立即执行,因为这是一个goroutine。
c2
收到c1
收到的邮件后,int fact(int x)
{
if(x!=1)
return x*fact(x-1);
return 1;
}
会收到下一条收到的邮件吗?
答案 0 :(得分:0)
您的代码不使用goroutines,为了使用go例程,您应该执行以下操作:
q := make(chan type)
go sq(in, q)
go sq(in, q)
for elem := range q {
fmt.Println(elem)
}
和sq必须通过通道返回值
func sq(in type, q chan type) {
...
q <- valueFromIn
...
}
此外,您可以使用WaitGroup等待goroutines完成。