Maison > développement back-end > Golang > le corps du texte

Implémentation de la bibliothèque standard de la fonction gocron (testable)

王林
Libérer: 2024-02-15 12:51:08
avant
1046 Les gens l'ont consulté

Implémentation de la bibliothèque standard de la fonction gocron (testable)

L'éditeur PHP Baicao vous présente une fonction appelée gocron, qui est une implémentation de bibliothèque standard et possède des fonctionnalités testables. La fonction gocron est conçue pour fournir un moyen simple de créer et de gérer des tâches planifiées. Il peut aider les développeurs à écrire et planifier facilement plusieurs tâches planifiées, et fournit également des fonctions de test flexibles pour permettre aux développeurs d'effectuer des tests unitaires et une vérification fonctionnelle. Que ce soit dans un environnement de développement ou un environnement de production, la fonction gocron est un outil puissant et fiable qui peut être utilisé pour mettre en œuvre diverses exigences de tâches de synchronisation complexes.

Contenu de la question

Je dois exécuter une tâche à certains intervalles (atteindre le point de terminaison restant, puis envoyer un message à la file d'attente). Actuellement, j'ai cette fonction qui utilise gocron - https://github.com/go-co-op/gocron

Mais il n'existe actuellement aucun mécanisme pour arrêter cette fonctionnalité, je ne peux donc pas la tester proprement.

func RunSchedule(cronExpression string, myFunction func()) error {
    scheduler := gocron.NewScheduler(time.UTC)
    _, err := scheduler.Cron(cronExpression).StartImmediately().Do(myFunction)
    if err != nil {
        return err
    }
    scheduler.StartBlocking()
    return nil
}
Copier après la connexion

Il fait ce qui est demandé et exécute la fonction paramétrée aux intervalles requis, mais je suis sûr qu'il doit exister une solution plus propre - probablement la bibliothèque standard.

Solution

Vous pouvez simplement renvoyer la fonction .stop :

func runschedule(cronexpression string, myfunction func()) (stop func(), err error) {
    scheduler := gocron.newscheduler(time.utc)
    _, err = scheduler.cron(cronexpression).startimmediately().do(myfunction)
    if err != nil {
        return nil, err
    }
    go func() {
        scheduler.startblocking()
    }()

    return scheduler.stop, nil
}
Copier après la connexion

Ensuite, dans votre test, vous pouvez faire ce qui suit :

called := 0
stop, err := RunSchedule("some-schedule", func() {
    called++
})
time.Sleep(time.Second * 1) // whatever you need to do 
stop()
if called != 1 {
    t.Fail("called should be 1")
}
Copier après la connexion

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!

Étiquettes associées:
source:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal