Golang中午运行代码
是否可以每天中午执行代码?该程序将在其余的运行时间中处理用户输入,但需要在中午运行一个函数以输出一些文本。最有效的方法是什么?
回答:
因此,您需要间隔计时器每天每天中午运行一项功能,您可以使用:
timer.AfterFunc() 或time.Tick()或time.Sleep()或time.Ticker
首先,在程序启动时,计算直到下一个正午的启动时间间隔,并使用一些等待(例如time.Sleep或…),然后24 *
time.Hour在下一个间隔中使用 间隔。
示例代码使用time.Sleep:
package mainimport "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 mainimport (
    "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 mainimport (
    "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
