2
本示例摘自http://blog.golang.org/pipelines。它運行並給出正確的答案,但它顯示以下運行時錯誤:「致命錯誤:所有goroutines睡着了 - 死鎖!」。任何人都可以幫助我理解爲什麼會發生? 包主以下golang代碼死鎖。有人可以幫助理解爲什麼嗎?
import (
"fmt"
)
func gen(nums ...int) <- chan int {
out := make(chan int)
go func() {
for _, n := range nums {
out <- n
}
}()
return out
}
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 main() {
for n := range sq(gen(2,3)) {
fmt.Println(n)
}
}
但是,下面的修改沒有。
func main() {
// Set up the pipeline.
c := gen(2, 3)
out := sq(c)
// Consume the output.
fmt.Println(<-out) // 4
fmt.Println(<-out) // 9
}