gpt4 book ai didi

go - 中午在Golang跑代码

转载 作者:IT王子 更新时间:2023-10-29 01:18:24 26 4
gpt4 key购买 nike

是否可以每天中午执行代码?该程序在其运行时间的其余时间处理用户输入,但需要在中午运行一个函数来输出一些文本。最有效的方法是什么?

最佳答案

所以你需要Interval Timer每天中午运行一个函数,你可以使用:
timer.AfterFunc()time.Tick()time.Sleep()time.Ticker

首先当程序开始计算启动时间的时间间隔,直到下一个中​​午,并使用一些等待(例如 time.Sleep 或 ...)然后使用 24 * time.Hour interval 为下一个间隔。

使用 time.Sleep 的示例代码:

package main

import "fmt"
import "time"

func noonTask() {
fmt.Println(time.Now())
fmt.Println("do some job.")
}
func initNoon() {
t := time.Now()
n := time.Date(t.Year(), t.Month(), t.Day(), 12, 0, 0, 0, t.Location())
d := n.Sub(t)
if d < 0 {
n = n.Add(24 * time.Hour)
d = n.Sub(t)
}
for {
time.Sleep(d)
d = 24 * time.Hour
noonTask()
}
}
func main() {
initNoon()
}

你可以将 main 更改为这个(或任何你需要的东西):

func main() {
go initNoon()

// do normal task here:
for {
fmt.Println("do normal task here")
time.Sleep(1 * time.Minute)
}
}

使用 timer.AfterFunc:

package main

import (
"fmt"
"sync"
"time"
)

func noonTask() {
fmt.Println(time.Now())
fmt.Println("do some job.")
timer.AfterFunc(duration(), noonTask)
}
func main() {
timer.AfterFunc(duration(), noonTask)
wg.Add(1)
// do normal task here
wg.Wait()
}

func duration() time.Duration {
t := time.Now()
n := time.Date(t.Year(), t.Month(), t.Day(), 12, 0, 0, 0, t.Location())
if t.After(n) {
n = n.Add(24 * time.Hour)
}
d := n.Sub(t)
return d
}

var wg sync.WaitGroup

使用 time.Ticker:

package main

import (
"fmt"
"sync"
"time"
)

var ticker *time.Ticker = nil

func noonTask() {
if ticker == nil {
ticker = time.NewTicker(24 * time.Hour)
}
for {
fmt.Println(time.Now())
fmt.Println("do some job.")
<-ticker.C
}
}
func main() {
timer.AfterFunc(duration(), noonTask)
wg.Add(1)
// do normal task here
wg.Wait()
}

func duration() time.Duration {
t := time.Now()
n := time.Date(t.Year(), t.Month(), t.Day(), 12, 0, 0, 0, t.Location())
if t.After(n) {
n = n.Add(24 * time.Hour)
}
d := n.Sub(t)
return d
}

var wg sync.WaitGroup

并查看:
https://github.com/jasonlvhit/gocron
Golang - How to execute function at specific times
Golang: Implementing a cron / executing tasks at a specific time

关于go - 中午在Golang跑代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38386762/

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