如果我從未檢查過Go通道的狀態(tài),可以永遠(yuǎn)保持打開狀態(tài)(永遠(yuǎn)不關(guān)閉通道)可以嗎?會導(dǎo)致內(nèi)存泄漏嗎?下列代碼可以嗎?func (requestCh chan<- Request) GetResponse(data RequestData) Response { reply := make(chan Response) requestCh <- Request{data: data, replyCh: reply} return <-reply}
3 回答

慕仙森
TA貢獻(xiàn)1827條經(jīng)驗 獲得超8個贊
永遠(yuǎn)保持Go頻道永遠(yuǎn)不關(guān)閉是可以的。當(dāng)不再使用該通道時,將對其進(jìn)行垃圾回收。
請注意,只有當(dāng)接收器正在尋找關(guān)閉通道時,才需要關(guān)閉通道。關(guān)閉通道是通道上的控制信號,指示沒有更多數(shù)據(jù)跟隨。

當(dāng)年話下
TA貢獻(xiàn)1890條經(jīng)驗 獲得超9個贊
是的,保持頻道開放是可以的。正如Go編程語言書所述:
完成所有頻道后,您無需關(guān)閉每個頻道。僅在必須告知接收goroutines已發(fā)送所有數(shù)據(jù)的情況下,才需要關(guān)閉通道。垃圾回收器確定其無法訪問的通道將收回其資源,無論該通道是否關(guān)閉。(不要將它與打開文件的關(guān)閉操作混淆。在完成每個文件后,對每個文件調(diào)用Close方法很重要 。)

長風(fēng)秋雁
TA貢獻(xiàn)1757條經(jīng)驗 獲得超7個贊
- 3 回答
- 0 關(guān)注
- 308 瀏覽
添加回答
舉報
0/150
提交
取消