gpt4 book ai didi

go - Golang 中类似定时器功能的警报

转载 作者:IT王子 更新时间:2023-10-29 02:15:06 25 4
gpt4 key购买 nike

有没有办法在 Golang 中设计一个在未来特定时间到期的计时器?我的意思是一个在凌晨 2 点到期的计时器(让当前时间为凌晨 12 点)。我知道一种方法是使用,

 timer(target_future_time - current_time)   

但似乎不是一个确切的方法(考虑到执行时间可能不准确)。有人可以帮忙吗?

最佳答案

在golang中,可能有两种创建代码的方法,如下所示:

package main

import (
"fmt"
"time"
)

func main() {
//第一种实现方式
ticker1 := time.NewTicker(1 * time.Second)
i := 1
for c := range ticker1.C {
i++
fmt.Println(c.Format("2006/01/02 15:04:05.999999999"))
if i > 5 {
ticker1.Stop()
break
}
}
fmt.Println(time.Now().Format("2006/01/02 15:04:05.999999999"), " 1 Finished.")

//第二种实现方式
i = 1
ticker2 := time.AfterFunc(1*time.Second, func() {
i++
fmt.Println(time.Now().Format("2006/01/02 15:04:05.999999999"))
})

for {
select {
case <-ticker2.C:
fmt.Println("nsmei")
case <-time.After(3 * time.Second):
if i <= 5 {
ticker2.Reset(1 * time.Second)
continue
}
goto BRK
}
BRK:
ticker2.Stop()
break
}
fmt.Println(time.Now().Format("2006/01/02 15:04:05.999999999"), " 2 Finished.")
}

输出:

2016/01/26 16:46:34.261248567
2016/01/26 16:46:35.256381743
2016/01/26 16:46:36.259717152
2016/01/26 16:46:37.260320837
2016/01/26 16:46:38.259312704
2016/01/26 16:46:38.259410752 1 Finished.
2016/01/26 16:46:39.260604274
2016/01/26 16:46:42.261091322
2016/01/26 16:46:45.263136257
2016/01/26 16:46:48.264193517
2016/01/26 16:46:51.265655137
2016/01/26 16:46:53.265722632 2 Finished.

根据执行情况,第一个比第二个更精确。

在您的情况下,您可以使用 time.Time.Sub()计算时长,使用第二种方法执行一次,其余使用第一种方法。

希望这些对你有帮助!

关于go - Golang 中类似定时器功能的警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35009070/

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