亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

僅在滿足某些條件的情況下,如何在`select`語句中執行`case`

僅在滿足某些條件的情況下,如何在`select`語句中執行`case`

Go
萬千封印 2022-10-17 10:05:11
我有一個頻道:aChan := make(chan struct{})和超時時間var t time.Duration。如果通道關閉,或者t達到超時,我希望程序退出, 如果 t 是正的 duration。我知道我可以使用外部 if else 循環,但這看起來非常多余:    if t >= time.Duration(0) {        select {        case <-time.After(t):            fmt.Fprintln(os.Stdout, "timeout!"))            close(timeoutChan)        case <-aChan:            fmt.Fprintln(os.Stdout, "aChan is closed"))            return        }    } else {        select {        case <-aChan:            fmt.Fprintln(os.Stdout, "aChan is closed"))            return        }    }有沒有更優雅的方式來寫這個?
查看完整描述

1 回答

?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

nil當持續時間小于零時,使用通道進行超時。通道的超時情況nil不會執行,因為nil通道上的接收永遠不會準備好。


var after <-chan time.Time

if t >= 0 {

    after = time.After(t)

}

select {

case <-after:

    fmt.Println("timeout!")

    close(timeoutChan)

case <-aChan:

    fmt.Println("aChan is closed")

    return

}


查看完整回答
反對 回復 2022-10-17
  • 1 回答
  • 0 關注
  • 100 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號