首頁 > 後端開發 > Golang > 主體

如何在處理並髮使用者輸入的同時每天中午執行 Go 函數?

Mary-Kate Olsen
發布: 2024-11-21 06:23:09
原創
1009 人瀏覽過

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
登入後複製
使用計時器.AfterFunc:

附加資訊
  • [Github: Gocron](https://github.com/jasonlvhit/gocron) 提供實用程式庫用於在Go 中排程作業。
  • [Golang - 如何在特定時間執行函數](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
    作者最新文章
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板