Exécuter des tâches à un moment précis dans Go : un guide complet
Exécuter des tâches à des intervalles prédéterminés ou à des heures spécifiques est une exigence courante dans diverses applications Go. En l'absence de mécanisme intégré, les utilisateurs recherchent souvent des solutions pour une planification flexible des tâches.
L'une de ces solutions est un minuteur de travail auto-implémenté qui vous permet de définir des paramètres d'exécution précis :
Détails de mise en œuvre
Ce minuteur de tâches offre un contrôle précis sur les temps d'exécution, vous permettant de spécifier la :
Fonctionnement Mécanisme
Mémoire Optimisation
L'implémentation d'origine a souffert d'une fuite de mémoire, qui a été corrigée dans le code mis à jour.
Extrait de code
package main import ( "fmt" "time" ) // Constants for timer settings const ( INTERVAL_PERIOD = 24 * time.Hour HOUR_TO_TICK = 23 MINUTE_TO_TICK = 00 SECOND_TO_TICK = 03 ) // Job timer struct type jobTicker struct { timer *time.Timer } // Main running routine func main() { jobTicker := &jobTicker{} jobTicker.updateTimer() for { <-jobTicker.timer.C fmt.Println(time.Now(), "- just ticked") jobTicker.updateTimer() } } // Update the timer to the next scheduled time func (t *jobTicker) updateTimer() { // Calculate the next tick time based on current time and settings nextTick := time.Date(time.Now().Year(), time.Now().Month(), time.Now().Day(), HOUR_TO_TICK, MINUTE_TO_TICK, SECOND_TO_TICK, 0, time.Local) // Handle the case when the next tick has already passed if !nextTick.After(time.Now()) { nextTick = nextTick.Add(INTERVAL_PERIOD) } fmt.Println(nextTick, "- next tick") diff := nextTick.Sub(time.Now()) // Create or reset the timer with the updated time if t.timer == nil { t.timer = time.NewTimer(diff) } else { t.timer.Reset(diff) } }
En utilisant cette technique, vous pouvez facilement planifier et exécuter des tâches à des moments précis au sein de vos applications Go, améliorant ainsi leurs capacités d'automatisation.
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!