Maison > développement back-end > Golang > Comment exécuter une fonction Go quotidiennement à midi tout en gérant les entrées utilisateur simultanées ?

Comment exécuter une fonction Go quotidiennement à midi tout en gérant les entrées utilisateur simultanées ?

Mary-Kate Olsen
Libérer: 2024-11-21 06:23:09
original
1045 Les gens l'ont consulté

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

Exécuter du code à midi à Golang

Dans ce scénario, nous visons à exécuter une fonction spécifique à midi chaque jour tout en gérant les entrées de l'utilisateur pendant le reste de l'exécution du programme. Plusieurs approches peuvent efficacement y parvenir :

Interval Timer

Les fonctions de minuterie dans Go nous permettent d'exécuter des tâches à des intervalles prédéfinis. Pour programmer quotidiennement une fonction à midi, nous pouvons utiliser :

  • timer.AfterFunc() : Exécute une fonction après une durée spécifiée.
  • time.Tick() : renvoie un canal qui envoie l'heure actuelle à l'intervalle spécifié.
  • time.Sleep() : met le programme en pause pendant une durée spécifiée.
  • time.Ticker : similaire à timer.Tick(), mais fournit un canal qui envoie l'heure actuelle à l'intervalle spécifié et se réinitialise après chaque envoi.

Calcul de l'intervalle

Pour déterminer l'intervalle entre l'heure actuelle et le midi suivant, nous calculons d'abord le temps restant jusqu'au premier midi après le démarrage du programme. Nous utilisons ensuite un intervalle de 24 heures pour les tâches ultérieures de midi.

Exemple de code utilisant 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()
}
Copier après la connexion

Utilisation de 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
Copier après la connexion

Informations supplémentaires

  • [Github : Gocron](https://github.com/jasonlvhit/gocron) fournit une bibliothèque d'utilitaires pour planifier des tâches dans Go.
  • [Golang - Comment exécuter une fonction à des heures spécifiques](https://tutorialedge.net/golang/golang-execute-function-special-times/)
  • [Golang : Implémenter un cron / exécuter des tâches à une heure précise](https://blog.logrocket.com/how-to-implement-a-cron-in-golang/)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal