1 回答

TA貢獻(xiàn)1828條經(jīng)驗 獲得超3個贊
因為通過聲明一個未初始化的 ,其類型的零值,在 a 的情況下為 。var c chan intcchannil
如果實際運行代碼,錯誤消息將顯示此信息。兩個 goroutine 都在 chan 上發(fā)送/接收:nil
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive (nil chan)]:
main.main()
/tmp/sandbox288806111/prog.go:11 +0x5c
goroutine 18 [chan send (nil chan)]:
main.send()
/tmp/sandbox288806111/prog.go:15 +0x39
created by main.main
/tmp/sandbox288806111/prog.go:10 +0x39
相反,您正在顯式初始化變量 ,然后不是 。makecnil
這與全局范圍本身無關(guān)。事實上,如果你正確地初始化變量,例如,即使在全局范圍內(nèi),程序也不會死鎖。var c chan int = make(chan int)
其他讀物:通道公理(戴夫·切尼)
如果信道為零,則發(fā)送方和接收方?jīng)]有相互參照;它們都被阻止等待獨立頻道,并且永遠(yuǎn)不會取消阻止。
- 1 回答
- 0 關(guān)注
- 86 瀏覽
添加回答
舉報