Go بالأمثلة: المؤقتات (Timers)

غالباً ما نرغب في تنفيذ كود Go في وقت ما في المستقبل، أو بشكل متكرر في فترات زمنية معينة. ميزات Go المدمجة المؤقت (timer) و المنبه (ticker) تجعل كلا المهمتين سهلتين. سننظر أولاً في المؤقتات ثم في المنبهات (tickers).

package main

import (
    "fmt"
    "time"
)

func main() {

تمثل المؤقتات حدثاً واحداً في المستقبل. تخبر المؤقت كم من الوقت تريد الانتظار، ويوفر قناة سيتم الإخطار عليها في ذلك الوقت. هذا المؤقت سينتظر ثانيتين.

    timer1 := time.NewTimer(2 * time.Second)

السطر <-timer1.C يعيق التنفيذ على قناة المؤقت C حتى يرسل قيمة تشير إلى أن المؤقت قد انطلق.

    <-timer1.C
    fmt.Println("انطلق المؤقت 1")

إذا كنت تريد الانتظار فقط، كان بإمكانك استخدام time.Sleep. أحد أسباب فائدة المؤقت هو أنه يمكنك إلغاء المؤقت قبل انطلاقه. إليك مثال على ذلك.

    timer2 := time.NewTimer(time.Second)
    go func() {
        <-timer2.C
        fmt.Println("انطلق المؤقت 2")
    }()
    stop2 := timer2.Stop()
    if stop2 {
        fmt.Println("تم إيقاف المؤقت 2")
    }

أعطِ timer2 وقتاً كافياً للانطلاق، لو كان سيفعل، لإظهار أنه قد توقف بالفعل.

    time.Sleep(2 * time.Second)
}

تشغيل البرنامج:

$ go run timers.go
انطلق المؤقت 1
تم إيقاف المؤقت 2

المثال التالي: المنبهات (Tickers).