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

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

跨通道范圍還是使用選擇更好?

跨通道范圍還是使用選擇更好?

Go
弒天下 2023-06-19 15:13:35
伙計們,我想知道如果我只有一個案例(我的頻道)并在給定頻道關(guān)閉時發(fā)出結(jié)束信號,是在頻道范圍內(nèi)還是使用選擇更好?給出示例:1. https://play.golang.org/p/3ZFdbgHSKyNgo func() {    for v := range ch {        // do some stuff    }}()2. https://play.golang.org/p/iCCkDge8j72go func() {    for {        select {        case v, ok := <-ch:            if !ok {                return            }            // do some stuff        }    }}()首選哪種解決方案,為什么?請考慮這樣一個事實,即 goroutines 本身可能會產(chǎn)生很多次(很多工人)。
查看完整描述

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ú)的分支相同。


查看完整回答
反對 回復(fù) 2023-06-19
?
開滿天機(jī)

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)

}()


查看完整回答
反對 回復(fù) 2023-06-19
  • 2 回答
  • 0 關(guān)注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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