這是我在Go Playground 的代碼package mainimport ( "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")}結果是:136fatal error: all goroutines are asleep - deadlock!我不明白是什么導致了錯誤。我的理解是,在我的函數(shù)中,sum_up我正在向my_channel. 為什么在我嘗試打印出值后會出現(xiàn)問題?由于我看到 1,3,6 被打印,這意味著所有goroutines都已成功完成。此外,如果試圖打印通道值的塊 for ele := range my_channel { fmt.Println(ele) }被刪除,然后我沒有收到錯誤。所以它包括導致錯誤的塊,但為什么呢?
3 回答

慕尼黑的夜晚無繁華
TA貢獻1864條經(jīng)驗 獲得超6個贊
for range chan
當 chan 收到關閉信號時退出。你必須在close(my_channel)
某個地方,否則循環(huán)將永遠等待。
- 3 回答
- 0 關注
- 218 瀏覽
添加回答
舉報
0/150
提交
取消