Go با مثال: تایمرها

اغلب می‌خواهیم کد Go را در زمانی در آینده یا به‌طور تکراری در فواصل مشخص اجرا کنیم. قابلیت‌های داخلی timer و ticker در Go هر دو کار را ساده می‌کنند. اول تایمرها را می‌بینیم و سپس تیکرها را.

package main
import (
    "fmt"
    "time"
)
func main() {

تایمرها نمایانگر یک رویداد واحد در آینده هستند. به تایمر می‌گویید چقدر می‌خواهید صبر کنید و تایمر کانالی در اختیارتان می‌گذارد که در آن زمان خبردار می‌شود. این تایمر ۲ ثانیه صبر می‌کند.

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

<-timer1.C روی کانال C تایمر مسدود می‌ماند تا تایمر مقداری بفرستد که نشان دهد زمانش فرا رسیده است.

    <-timer1.C
    fmt.Println("Timer 1 fired")

اگر فقط می‌خواستید صبر کنید، می‌توانستید از time.Sleep استفاده کنید. یکی از دلایل مفید بودن تایمر این است که می‌توانید آن را پیش از فرا رسیدن زمانش لغو کنید. این یک نمونه از آن است.

    timer2 := time.NewTimer(time.Second)
    go func() {
        <-timer2.C
        fmt.Println("Timer 2 fired")
    }()
    stop2 := timer2.Stop()
    if stop2 {
        fmt.Println("Timer 2 stopped")
    }

به timer2 به اندازهٔ کافی زمان می‌دهیم تا اگر قرار بود اجرا شود، اجرا شود؛ تا نشان دهیم که واقعاً متوقف شده است.

    time.Sleep(2 * time.Second)
}

تایمر اول حدود ۲ ثانیه پس از شروع برنامه اجرا می‌شود، اما تایمر دوم باید پیش از اینکه فرصت اجرا پیدا کند متوقف شود.

$ go run timers.go
Timer 1 fired
Timer 2 stopped

مثال بعدی: .