How to run a function in golang at a certain time?
I need to run the function myfunc , for example, at 00:00. How to do it?
How to run a function in golang at a certain time?
I need to run the function myfunc , for example, at 00:00. How to do it?
Well, for example like this:
package main import ( "time" "fmt" ) // ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΎΡΠΌΠ°ΡΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. const timeLayout = "Jan 2, 2006 15:04:05 MST" // ΠΡΠ·ΠΎΠ² ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ. func callAt(callTime string, f func()) error { // Π Π°Π·Π±ΠΈΡΠ°Π΅ΠΌ Π²ΡΠ΅ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ°. ctime, err := time.Parse(timeLayout, callTime) if err != nil { return err } // ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΠΊ Π΄ΠΎ Π·Π°ΠΏΡΡΠΊΠ°. duration := ctime.Sub(time.Now()) go func() { time.Sleep(duration) f() }() return nil } // ΠΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ. func myfunc() { fmt.Printf("+ %v\n", time.Now()) } // ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. func main() { err := callAt("Jul 17, 2015 00:00:00 MSK", myfunc) if err != nil { fmt.Printf("error: %v\n", err) } // ΠΠΌΡΠ»ΡΡΠΈΡ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. time.Sleep(time.Hour * 24) } Actually, there are many ways, for example, you can use time.After , after a specified period of time, a message will be sent to the channel. The main question here is in the calculation of this very interval; One of the possible options I brought.
Update : here's an option for everyday launch:
package main import ( "time" "fmt" ) // ΠΡΠ·ΠΎΠ² ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°Π· Π² ΡΡΡΠΊΠΈ Π² ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ. func callAt(hour, min, sec int, f func()) error { loc, err := time.LoadLocation("Local") if err != nil { return err } // ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌ Π²ΡΠ΅ΠΌΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ°. now := time.Now().Local() firstCallTime := time.Date( now.Year(), now.Month(), now.Day(), hour, min, sec, 0, loc) if firstCallTime.Before(now) { // ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ Π²ΡΠ΅ΠΌΡ ΡΠ°Π½ΡΡΠ΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ, ΠΏΡΠΈΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΡΡΠΊΠΈ. firstCallTime = firstCallTime.Add(time.Hour * 24) } // ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΠΊ Π΄ΠΎ Π·Π°ΠΏΡΡΠΊΠ°. duration := firstCallTime.Sub(time.Now().Local()) go func() { time.Sleep(duration) for { f() // Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ Π·Π°ΠΏΡΡΠΊ ΡΠ΅ΡΠ΅Π· ΡΡΡΠΊΠΈ. time.Sleep(time.Hour * 24) } }() return nil } // ΠΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ. func myfunc() { fmt.Printf("+ %v\n", time.Now()) } // ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. func main() { err := callAt(0, 0, 0, myfunc) if err != nil { fmt.Printf("error: %v\n", err) } // ΠΠΌΡΠ»ΡΡΠΈΡ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. time.Sleep(time.Hour * 24) } Source: https://ru.stackoverflow.com/questions/436143/
All Articles