gpt4 book ai didi

go - 我如何在 Go 中以相同的方式对来自多个 channel 的输入使用react?

转载 作者:IT王子 更新时间:2023-10-29 01:58:59 27 4
gpt4 key购买 nike

我有一些并发代码有两种不同的超时间隔,一种是静态的,一种是动态的。我想对他们两个做出同样的 react 。这是它的要点:

select {
case <-time.After(staticTimeoutInterval):
doSomething()
case <-time.After(dynamicTimeoutInterval):
doSomething()
}

有什么方法可以只写一次 doSomething() 吗?奇怪的是,select 在这方面不如 switch 灵活。

最佳答案

在您的特定情况下,您可以使用类似的东西

timeout := min(staticTimeoutInterval, dynamicTimeoutInterval)

select {
case <-time.After(timeout):
doSomething()
}

func min(a, b time.Duration) int {
if a < b {
return a
}
return b
}

关于 switchselect 看似不一致的处理 - 虽然这些语句具有相似的语法,但 switch 的目的是分支执行,而select 的目的是交流。

如果我可以夸大的话:

  • switch 是关于 after case 表达式的部分 - 这里的 case 表达式主要是一个简单的,副作用自由表达
  • select 是关于 in case 表达式的部分 - 这里的 case 表达式为您提供了重要的沟通的副作用,实现起来一点也不简单

select 中允许 fallthrough 将允许您在某些情况下节省几行,但它通常会使 select 语句更难推理。在其他情况下给出类似的选择,Go 的创造者几乎总是选择更冗长但更容易理解的选择。

关于go - 我如何在 Go 中以相同的方式对来自多个 channel 的输入使用react?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36213355/

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