我有一個頻道: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
}
- 1 回答
- 0 關注
- 100 瀏覽
添加回答
舉報
0/150
提交
取消