同一個channel, 我需要在多個goroutine中send, 在一個goroutine中receive, 并且我可以隨時關閉這個channel, 問題是如果我關閉channel后還有send, 就會導致一個panic.網上找到的一個方法是panic后再recoverfunc SafeSend(ch chan T, value T) (closed bool) { defer func() { if recover() != nil { // the return result can be altered // in a defer function call closed = true } }() ch <- value // panic if ch is closed return false // <=> closed = false; return}因為不想用recover,問一下還有沒有更加優雅的方式去實現
2 回答

不負相思意
TA貢獻1777條經驗 獲得超10個贊
同一個channel, 需要在多個goroutine中send的話應該用緩沖區chan。
recover是盡量不用的,因此,應該在sender之前就做判斷
題主應該是之前用過一段時間的其他語言,并且接觸go不久,因此在錯誤處理的思路上,還不太符合go的特點。
與大多數語言不同,用try...catch...等機制來做錯誤處理,go建議大家不要輕易使用recover,而是用返回err對象來處理。因此,在可能出現panic的語句之前,盡量用能夠返回err的函數去檢查可能出現的錯誤!
- 2 回答
- 0 關注
- 1611 瀏覽
添加回答
舉報
0/150
提交
取消