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
غولانغ - كيفية تنفيذ وظيفة في أوقات محددة
غولانغ: تنفيذ المهام كرون / تنفيذ في وقت محدد

هل من الممكن لتنفيذ التعليمات البرمجية في الظهر كل يوم؟ البرنامج هو التعامل مع إدخال المستخدم بقية وقت تشغيلها ولكن يحتاج إلى تشغيل وظيفة عند الظهر لإخراج بعض النص. ما هي الطريقة الأكثر فعالية للقيام بذلك؟





automation