go - تشغيل رمز عند الظهر في غولانغ
time automation (1)
هل من الممكن لتنفيذ التعليمات البرمجية في الظهر كل يوم؟ البرنامج هو التعامل مع إدخال المستخدم بقية وقت تشغيلها ولكن يحتاج إلى تشغيل وظيفة عند الظهر لإخراج بعض النص. ما هي الطريقة الأكثر فعالية للقيام بذلك؟
لذلك تحتاج الفاصل الزمني الموقت لتشغيل وظيفة واحدة في الظهر كل يوم، يمكنك استخدام:
time.AfterFunc()
أو time.Tick()
أو time.Sleep()
أو time.Ticker
أولا عندما يبدأ البرنامج حساب الفاصل الزمني لوقت البدء حتى أول ظهرا المقبل واستخدام بعض الانتظار (على سبيل المثال time.Sleep
أو ...) ثم استخدام 24 * time.Hour
الفاصل الزمني 24 * time.Hour
الزمني المقبل.
عينة رمز باستخدام 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()
}
ويمكنك تغيير الرئيسي لهذا (أو أي شيء تحتاجه):
func main() {
go initNoon()
// do normal task here:
for {
fmt.Println("do normal task here")
time.Sleep(1 * time.Minute)
}
}
باستخدام 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
باستخدام 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
ونرى:
https://github.com/jasonlvhit/gocron
غولانغ - كيفية تنفيذ وظيفة في أوقات محددة
غولانغ: تنفيذ المهام كرون / تنفيذ في وقت محدد