我經歷Go by Example: Non-Blocking Channel Operationsgo中的非阻塞通道操作。發送?
據我瞭解,第一select
觸發了default
情況下,因爲有沒有在messages
通道,如果default
情況下不存在,我們會得到一個fatal error: all goroutines are asleep - deadlock!
錯誤,對嗎?
好了,我想不通我怎麼能觸發第二select
,特別是觸發case messages <- msg:
因爲我認爲,它應該工作對面的接收。因此,如果有2條消息的緩衝區,並且我們將第3條消息發送到通道,則會觸發default
子句,但messages
通道爲空,那麼爲什麼在第二次選擇時會觸發default
子句?我怎樣才能觸發case messages <- msg:
條款?
更多的問題:d 但希望我會弄清楚它是對我自己的,謝謝! – Arno
@Arno,閱讀這篇文章http://stackoverflow.com/questions/18660533/why-using-unbuffered-channel-in-the-the-same-goroutine-gives-a-deadlock的解釋:) –