英文:
Run function only once for specific time Golang
问题
我需要使用Golang在特定时间设置一个任务。例如,任务有一个结束时间,所以我需要在表格上更改一些行。我搜索了一下,但只找到了使用Cron进行周期性任务的方法。我不想设置一个Cron来每5分钟检查数据库。
jasonlvhit有一个名为gocron的库,用于在Golang中使用Cron,但我不认为它对我的问题有用。
解决方案:
在@JimB的评论后,我查看了时间库的文档,发现time.AfterFunc函数可以帮助我解决这个问题。AfterFunc函数接受一个持续时间(Duration),它必须是纳秒,所以如果你创建一个类似nanoSecondsToSecond()的函数,它会很有用。
time.AfterFunc(nanoSecondToSecond(10), func() {
printSometing("Mert")
})
如果你定义了一个printSomething函数,你可以在闭包中调用它。
func printSometing(s string) {
fmt.Println("Timer " + s)
}
英文:
I need to set a task for specific time with Golang. For example job has ending time so I need to change some rows on table. I searched for it but I could only find periodic tasks with Cron. I don't want to set a cron to check database in every 5 minutes.
jasonlvhit has a library named gocron for Cron on Golang but I don't think It'll be useful on my problem.
Solved:
After @JimB's comment I checked the documentation of the time library and time.AfterFunc function can help me to solve this problem. After func function takes a Duration which must be nanosecond so it'll be useful if you create something like nanoSecondsToSecond()
time.AfterFunc(nanoSecondToSecond(10), func() {
printSometing("Mert")
})
If you define a printSomething function you can call it on closure.
func printSometing(s string) {
fmt.Println("Timer " + s)
}
答案1
得分: 3
你可以尝试这样做。我将它放在自己的go例程中,以便它是非阻塞的,并且可以在其下运行其他代码。通常与服务器一起使用。
ticker := time.NewTicker(5 * time.Minute)
go func(ticker *time.Ticker) {
for {
select {
case <-ticker.C:
// 每5分钟执行一次操作,由上面的ticker定义
}
}
}(ticker)
英文:
You could try something like this. I place it in its own go routine so that it is non blocking and addition code can run below it. Often times in conjunction with a server
ticker := time.NewTicker(5 * time.Minute)
go func(ticker *time.Ticker) {
for {
select {
case <-ticker.C:
// do something every 5 minutes as define by the ticker above
}
}
}(ticker)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论