pricing gratis aplicaciones alternatives go time automation

go - gratis - zapier pricing



Ejecutando el código al mediodía en Golang (1)

¿Es posible ejecutar código al mediodía todos los días? El programa maneja la entrada del usuario el resto de su tiempo de ejecución, pero necesita ejecutar una función al mediodía para producir algo de texto. ¿Cuál es la forma más efectiva de hacer esto?


Entonces, necesita el Intervalo de tiempo para ejecutar una función al mediodía todos los días, puede usar:
time.AfterFunc() o time.Tick() o time.Sleep() o time.Ticker

primero, cuando el programa comience a calcular el intervalo de tiempo de inicio hasta el próximo mediodía y use un poco de espera (por ejemplo, time.Sleep o ...) luego use 24 * time.Hour intervalo para el próximo intervalo.

Código de muestra con time.Sleep . 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() }

y puede cambiar main a esto (o cualquier cosa que necesite):

func main() { go initNoon() // do normal task here: for { fmt.Println("do normal task here") time.Sleep(1 * time.Minute) } }

usando time.AfterFunc :

package main import ( "fmt" "sync" "time" ) func noonTask() { fmt.Println(time.Now()) fmt.Println("do some job.") time.AfterFunc(duration(), noonTask) } func main() { time.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

usando time.Ticker :

package main import ( "fmt" "sync" "time" ) var ticker *time.Ticker = nil func noonTask() { if ticker == nil { ticker = time.NewTicker(24 * time.Hour) } for { fmt.Println(time.Now()) fmt.Println("do some job.") <-ticker.C } } func main() { time.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

y ver:
https://github.com/jasonlvhit/gocron
Golang - Cómo ejecutar la función en momentos específicos
Golang: Implementando un cron / ejecutando tareas en un momento específico