首页 > 后端开发 > Golang > 如何在处理并发用户输入的同时每天中午执行 Go 函数?

如何在处理并发用户输入的同时每天中午执行 Go 函数?

Mary-Kate Olsen
发布: 2024-11-21 06:23:09
原创
1057 人浏览过

How to Execute a Go Function Daily at Noon While Handling Concurrent User Input?

在 Golang 中中午执行代码

在这个场景中,我们的目标是每天中午运行一个特定的函数,同时处理用户输入程序的其余部分执行。有几种方法可以有效地实现这一点:

间隔计时器

Go 中的计时器函数允许我们以预定义的时间间隔执行任务。要安排每天中午执行函数,我们可以使用:

  • timer.AfterFunc():在指定的持续时间后执行函数。
  • time.Tick():返回在指定时间发送当前时间的通道
  • time.Sleep():暂停程序指定的时间。
  • time.Ticker:类似于timer.Tick( ),但提供了一个按指定时间间隔发送当前时间并在每次发送后重置的通道

计算时间间隔

要确定当前时间与下一个中午之间的时间间隔,我们首先计算到下一个中​​午的剩余时间程序开始。然后,我们对后续的中午任务使用 24 小时间隔。

使用 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()
}
登录后复制

使用计时器.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
登录后复制

额外信息

  • [Github: Gocron](https://github.com/jasonlvhit/gocron) 提供了一个用于在 Go 中调度作业的实用程序库。
  • [Golang -如何在特定的时间执行函数times](https://tutorialedge.net/golang/golang-execute-function-specific-times/)
  • [Golang: 实现 cron/在特定时间执行任务](https://blog .logrocket.com/how-to-implement-a-cron-in-golang/)

以上是如何在处理并发用户输入的同时每天中午执行 Go 函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板