2 回答

TA貢獻(xiàn)1757條經(jīng)驗 獲得超8個贊
除非選擇的另一個分支,否則使用以下內(nèi)容:
for v := range ch {
// do some stuff
}
該代碼比問題中提供的 for/select 更簡單、更容易理解。
如果出于某種原因需要在循環(huán)內(nèi)進(jìn)行接收,請使用以下代碼:
for {
// do some stuff
v, ok := <-ch
if !ok {
break
}
// do some other stuff
}
根據(jù)經(jīng)驗,應(yīng)避免使用單分支選擇語句。帶有單個分支的選擇在功能上與單獨(dú)的分支相同。

TA貢獻(xiàn)1786條經(jīng)驗 獲得超13個贊
如果您只是在不需要返回值的完成通道上等待,那么您可以完全放棄 for 循環(huán),因為通道會阻塞。例如
// Verbose
go func() {
for {
select {
case <-blah.Context.Done():
// Cleanup/Close
return
}
}
}()
// Simplified
go func() {
<-blah.Context.Done():
// Cleanup/Close (No return required either)
}()
- 2 回答
- 0 關(guān)注
- 151 瀏覽
添加回答
舉報