已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。
12小时前关门了。
Improve this question
我试图在一个循环中执行sql查询,循环需要退出5秒,如果迭代完成,也需要退出。
startTime := time.Now()
for _, index := range indices {
elapsedTime := time.Since(startTime)
if elapsedTime.Seconds() >= 5 {
break
}
// sql query execution
}
有没有更好的办法呢?
2条答案
按热度按时间pcww981p1#
暂时忽略这里明显的X-Y问题,在5秒后打破循环是微不足道的:
你可以只使用一个时间间隔和一个select来完成类似这样的操作:
简单。为了确保查询在5秒后不被执行,你也可以使用一个带有超时的上下文,并将该上下文传递给所有与SQL相关的调用:
循环的其余部分看起来几乎相同:
X-Y问题
现在回到X-Y问题:我不确定实现一个硬时间限制是否是解决你的问题的方法。为什么你要迭代一个名为 “indeces” 的切片,这反过来又会导致在一段延长的时间内执行任意数量的查询,而且,正如你在评论中提到的,为什么所有这些查询一开始就不一样?这个循环应该做什么?你想实现什么?有一个接近100%的保证你所遇到的问题不应该被解决,而是可以很容易地避免的(因此,你问的是如何做Y,而真实的的问题是为什么你做了X,导致你现在寻找一种方法来做Y)
fnx2tebb2#
你是在问关于使用一个在5秒后超时的上下文的问题吗?根据你的实现,你可以把上下文传递给你的sql查询函数,或者在上下文超时时简单地从例程中返回。一个粗略的大纲可能看起来像这样。