1 回答

TA貢獻1818條經驗 獲得超3個贊
對于通道 c,內置函數(shù) close(c) 記錄不會在通道上發(fā)送更多值。如果 c 是只接收通道,這是一個錯誤。發(fā)送到或關閉關閉的通道會導致運行時恐慌。關閉 nil 通道也會導致運行時恐慌。在調用 close 之后,并且在接收到任何先前發(fā)送的值之后,接收操作將在不阻塞的情況下返回通道類型的零值。多值接收操作返回接收到的值以及通道是否關閉的指示。
如果你寫入一個封閉的通道,你的程序會崩潰。如果您真的想這樣做,您可能會通過恢復來捕獲此錯誤,但是處于不知道要寫入的通道是否打開的情況通常是程序中存在錯誤的跡象。
一些引用:
這是一個動機:
通道“關閉”實際上只是在通道上發(fā)送特殊值。這是一個特殊的值,承諾不會發(fā)送更多的值。嘗試在關閉后在通道上發(fā)送值會導致恐慌,因為實際發(fā)送值會違反 close 提供的保證。由于關閉只是一種特殊的發(fā)送,因此在通道關閉后也是不允許的。
這是另一個:
通道關閉的唯一用途是向讀者發(fā)出信號,表明沒有更多的值出現(xiàn)。這僅在存在單一值來源或多個來源協(xié)調時才有意義。沒有合理的程序可以讓多個 goroutine 關閉一個通道而不進行通信。這意味著多個 goroutine 會知道沒有更多的值要發(fā)送——如果它們不通信,它們如何確定呢?
(伊恩·蘭斯·泰勒)
——
這是另一個:
關閉通道會將其作為資源釋放。多次關閉通道并不比多次關閉文件描述符或多次釋放分配的內存塊更有意義。此類操作意味著代碼已損壞,這就是關閉關閉的通道會觸發(fā)恐慌的原因。
(羅伯·派克)
——
- 1 回答
- 0 關注
- 173 瀏覽
添加回答
舉報