Go 给定代码的执行流程将如何?以及围棋程序将如何在这里执行?

Go 给定代码的执行流程将如何?以及围棋程序将如何在这里执行?,go,concurrency,goroutine,Go,Concurrency,Goroutine,并发编程新手 我有一个疑问,为什么goroutines的执行流程在这里有点奇怪 golang中goroutines和Channel内容的初学者 func main() { // Set up the pipeline. c := gen(2, 3) out := sq(c) // Consume the output. fmt.Println(<-out) // 4 fmt.Println(<-out) // 9 } func sq

并发编程新手 我有一个疑问,为什么goroutines的执行流程在这里有点奇怪

golang中goroutines和Channel内容的初学者

func main() {
    // Set up the pipeline.
    c := gen(2, 3)
    out := sq(c)

    // Consume the output.
    fmt.Println(<-out) // 4
    fmt.Println(<-out) // 9
}

func sq(in <-chan int) <-chan int {
    out := make(chan int)
    go func() {
        for n := range in {
            out <- n * n
        }
        close(out)
    }()
    return out
}

func gen(nums ...int) <-chan int {
    out := make(chan int)
    go func() {
        for _, n := range nums {
            out <- n
        }
        close(out)
    }()
    return out
}
对gen和sq的调用完成后,将有3个goroutine同时运行。它们在通道之间传递数据,因此执行产生相同的结果

根内 sq内部 主要的 他们总是传递至少两条信息,因此按照下面的顺序运行代码

发电机内部输出sq内部输出主打印LN 对gen和sq的调用完成后,将有3个goroutine同时运行。它们在通道之间传递数据,因此执行产生相同的结果

根内 sq内部 主要的 他们总是传递至少两条信息,因此按照下面的顺序运行代码

发电机内部输出sq内部输出主打印LN 希望能有帮助。它是一个通用的管道图。所以有三个goroutine和两个通道


希望能有帮助。它是一个通用的管道图。有三个goroutine和两个通道

有人能解释一下这里的执行流程吗?你到底需要什么?图?简要描述:取两个数字,用gen创建一个通道。然后将该通道传递给sq,sq从通道中读取数据,直到它关闭。实际上,它在gen中关闭。sq使新通道传递两个元素,然后关闭它。然后你阅读两个元素的fmtA图解释可能会有所帮助。有人能解释一下这里的执行流程吗?你到底需要什么?图?简要描述:取两个数字,用gen创建一个通道。然后将该通道传递给sq,sq从通道中读取数据,直到它关闭。实际上,它在gen中关闭。sq使新通道传递两个元素,然后关闭它。然后,您阅读两个元素与fmtA图表的解释可能会有所帮助。