行き先2番目のgoroutineをコメントアウトすると、致命的なエラーが発生します。私はこのエラーの原因を理解していません。それを私に説明できますか?送信ゴルーチンからすべての値を受信した後ch
から受信にループブロックのゴルーチン間のデッドロック
0
1
2
3
4
5
6
7
8
9
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive]:
main.main()
/tmp/sandbox169127128/main.go:17 +0xa0
Program exited.
は簡潔な説明、セリーズいただきありがとうございます。私は「ブロッキング」のアイデアを完全に理解しているかどうかはわかりません。 これは、受信forループが永久に待機していることを意味しますか?これは、下のコードの左側にあるokがtrueを受け取るためですが、他にnumを与えることはありませんか? if num、ok:= <-ch; !ok – Pizzas
@Pizzas:https://en.wikipedia.org/wiki/Blocking_(computing)あなたのケースでは、 'num、ok:= <-ch'はブロックしています(別の応答を待っています)。それ以外の応答は決して来ていません。送信ルーチンが既に終了しているからです。送信中のルーチンでチャネルを閉じると、別の応答(チャネルが閉じていることを示す)_が受信されます。 – Flimzy
@Pizzasオープンチャネルで受信すると、チャネルに値が送信されるのを待ちます。受信ループは、送信側のゴルーチンからのすべての値が受信された後、永久に待機します。 –