【发布时间】:2021-12-30 10:54:00
【问题描述】:
我有一个频道:
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
}
}
有没有更优雅的写法?
【问题讨论】:
标签: go concurrency