第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang中channel如何在多個goroutine中優(yōu)雅(安全)的send

golang中channel如何在多個goroutine中優(yōu)雅(安全)的send

Go
鳳凰求蠱 2018-10-02 19:12:29
同一個channel, 我需要在多個goroutine中send, 在一個goroutine中receive, 并且我可以隨時關(guān)閉這個channel, 問題是如果我關(guān)閉channel后還有send, 就會導(dǎo)致一個panic.網(wǎng)上找到的一個方法是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,問一下還有沒有更加優(yōu)雅的方式去實現(xiàn)
查看完整描述

2 回答

?
不負(fù)相思意

TA貢獻(xiàn)1777條經(jīng)驗 獲得超10個贊

同一個channel, 需要在多個goroutine中send的話應(yīng)該用緩沖區(qū)chan。

recover是盡量不用的,因此,應(yīng)該在sender之前就做判斷

題主應(yīng)該是之前用過一段時間的其他語言,并且接觸go不久,因此在錯誤處理的思路上,還不太符合go的特點。

與大多數(shù)語言不同,用try...catch...等機(jī)制來做錯誤處理,go建議大家不要輕易使用recover,而是用返回err對象來處理。因此,在可能出現(xiàn)panic的語句之前,盡量用能夠返回err的函數(shù)去檢查可能出現(xiàn)的錯誤!


查看完整回答
反對 回復(fù) 2018-10-14
?
幕布斯6054654

TA貢獻(xiàn)1876條經(jīng)驗 獲得超7個贊

通過一個chan來通知這些生產(chǎn)者退出,用WaitGroup等待這些生產(chǎn)者退出,最后關(guān)閉這個主chan

查看完整回答
反對 回復(fù) 2018-10-14
  • 2 回答
  • 0 關(guān)注
  • 1630 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號