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 :
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() }
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
Informations supplémentaires
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!