Golang fmt.打印计时器
我怎样才能每5分钟使用一次fmt.PrintlnGolang fmt.打印计时器,go,time,duration,Go,Time,Duration,我怎样才能每5分钟使用一次fmt.Println h := fmt.Sprintf("%x", word) fmt.Println(h) 我需要这样的东西: 如果时间:=5分钟,则fmt.Println(h) 仅显示(n)每5分钟一次,而不是每行 编辑:显然我没有问正确的问题。 存在一个每秒生成随机数字的循环 for i := n1; i.Cmp(n2) < 0; i.Add(i, one) { i:=n1的;i、 Cmp(n2)
h := fmt.Sprintf("%x", word)
fmt.Println(h)
我需要这样的东西:
如果时间:=5分钟,则fmt.Println(h)
仅显示(n)每5分钟一次,而不是每行
编辑:显然我没有问正确的问题。
存在一个每秒生成随机数字的循环
for i := n1; i.Cmp(n2) < 0; i.Add(i, one) {
i:=n1的;i、 Cmp(n2)<0;i、 加(一、一){
我想要的是:不是显示每个生成的变量(I),而是
每5分钟就有一次
如果您想在5分钟后只做一次,可以使用goroutine和
WaitGroup
:
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
time.Sleep(...)
fmt.Println("hello")
}()
wg.Wait()
前往游乐场示例:
如果您想每隔5分钟做一件事,请执行以下操作:
func doEvery(d time.Duration, f func(time.Time)) {
for x := range time.Tick(d) {
f(x)
}
}
func helloworld(t time.Time) {
fmt.Printf("%v: Hello, World!\n", t)
}
func main() {
doEvery(3*time.Second, helloworld)
}
如果在5分钟后做某事,只需使用
时间。AfterFunc
:
time.AfterFunc(time.Minute * 5, func() {
// Do something after 5min
h := fmt.Sprintf("%x", word)
fmt.Println(h)
})
否则,如果每5分钟做一次,则使用for loop(并在需要时执行例行程序):
另一种方法是使用time。NewTicker
可以获得一个时间计数器:
ticker:=time.NewTicker(time.Minute * 5)
for{
select{
case <-ticker.C:
// Do something every 5min
h := fmt.Sprintf("%x", word)
fmt.Println(h)
}
}
ticker:=time.NewTicker(time.Minute*5)
为了{
挑选{
case重复执行任务的方法有很多种。选择哪一种取决于您。下面列出了一些方法:
- 最简单的方法(可能是):
- 返回一个新的Ticker,其中包含一个频道,该频道将以duration参数指定的时间段发送时间
ticker := time.NewTicker(5 * time.Minute)
defer ticker.Stop()
done := make(chan bool)
go func() {
time.Sleep(30 * time.Minute)
done <- true
}()
for {
select {
case <-done:
fmt.Println("Done!")
return
case <-ticker.C:
fmt.Println("hello")
}
}
- 这也很有帮助
c := cron.New()
c.AddFunc("@every 5m", func() { fmt.Println("hello") })
c.Start()
select {}
更新
- 我在github中找到了另一个链接:
我找到了另一个链接并更新了答案。谢谢!但我似乎没有问正确的问题。请检查“编辑部分”,并告诉我这是否有用:)@Mad,但您应该先指定它。是的,很抱歉:(
ticker := time.NewTicker(5 * time.Minute)
defer ticker.Stop()
done := make(chan bool)
go func() {
time.Sleep(30 * time.Minute)
done <- true
}()
for {
select {
case <-done:
fmt.Println("Done!")
return
case <-ticker.C:
fmt.Println("hello")
}
}
go func() {
for range time.Tick(5 * time.Second){
fmt.Println("hello")
}
}()
time.Sleep(30 * time.Second)
c := cron.New()
c.AddFunc("@every 5m", func() { fmt.Println("hello") })
c.Start()
select {}