我有一個頻道:
aChan := make(chan struct{})
和超時持續時間var t time.Duration。我希望程式在通道關閉或t超時(
如果 t 是正持續時間)時退出。
我知道我可以使用外部 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
}
}
有沒有更優雅的方式來寫這個?
uj5u.com熱心網友回復:
使用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
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/362128.html
