gpt4 book ai didi

go - 如何仅在满足某些条件的情况下才执行 `case`语句中的 `select`

转载 作者:行者123 更新时间:2023-12-02 01:52:40 24 4
gpt4 key购买 nike

我有一个 channel :

aChan := make(chan struct{})

和超时持续时间var t time.Duration。我希望程序在 channel 关闭或达到 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
}
}

有更优雅的写法吗?

最佳答案

当持续时间小于零时,使用nil channel 进行超时。 nil channel 的超时情况不会执行,因为 nil channel 上的接收永远不会准备好。

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
}

关于go - 如何仅在满足某些条件的情况下才执行 `case`语句中的 `select`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70038673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com