【发布时间】:2015-01-27 00:01:01
【问题描述】:
这是我在Go Playground的代码
package main
import (
"fmt"
)
func sum_up(my_int int, cs chan int) {
my_sum := 0
for i := 0; i < my_int; i++ {
my_sum += i
}
cs <- my_sum
}
func main() {
my_channel := make(chan int)
for i := 2; i < 5; i++ {
go sum_up(i, my_channel)
}
for ele := range my_channel {
fmt.Println(ele)
}
//fatal error: all goroutines are asleep - deadlock!
fmt.Println("Done")
}
结果:
1
3
6
fatal error: all goroutines are asleep - deadlock!
而且我不明白是什么导致了错误。我的理解是,在我的函数sum_up 中,我正在向my_channel 添加新值。为什么我尝试打印值后会出现问题?由于我看到打印了 1,3,6,这意味着所有 goroutines 都已成功完成。
此外,如果块尝试打印通道的值
for ele := range my_channel {
fmt.Println(ele)
}
已删除,然后我没有收到错误消息。所以它包含了导致错误的块,但是为什么呢?
【问题讨论】: