Golang中午运行代码

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

回答:

因此,您需要间隔计时器每天每天中午运行一项功能,您可以使用:

timer.AfterFunc()time.Tick()time.Sleep()time.Ticker

首先,在程序启动时,计算直到下一个正午的启动时间间隔,并使用一些等待(例如time.Sleep或…),然后24 *

time.Hour在下一个间隔中使用 间隔。

示例代码使用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

以上是 Golang中午运行代码 的全部内容, 来源链接: utcz.com/qa/403245.html

回到顶部