1 回答

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊
您遇到了死鎖,因?yàn)閲L試從通道接收消息,但沒有其他運(yùn)行的沒有發(fā)送者的 goroutine 存在。同時(shí)調(diào)用在后臺(tái)signal.Notify
啟動(dòng)watchSignalLoop()
goroutine,您可以在此處驗(yàn)證實(shí)現(xiàn)細(xì)節(jié)https://golang.org/src/os/signal/signal.go。
頻道不關(guān)心元素類型,除非你的元素類型大于 64kB(嚴(yán)格來說,還有其他細(xì)微差別,請(qǐng)檢查實(shí)現(xiàn))。
不要猜測(cè)運(yùn)行時(shí)是如何工作的,對(duì)其進(jìn)行研究。例如,您可以檢查調(diào)用make(chan int)
. 您可以go tool compile -S main.go | grep main.go:line of make chan
檢查從運(yùn)行時(shí)包中調(diào)用了哪個(gè)函數(shù)。然后只需跳轉(zhuǎn)到該文件并花時(shí)間了解實(shí)現(xiàn)。您會(huì)看到與其他事物相比,通道的實(shí)現(xiàn)非常簡(jiǎn)單明了
希望能幫助到你!
- 1 回答
- 0 關(guān)注
- 147 瀏覽
添加回答
舉報(bào)