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

تایمرها برای وقتی هستند که می‌خواهید کاری را یک بار در آینده انجام دهید؛ تیکرها (tickers) برای وقتی هستند که می‌خواهید کاری را به‌طور تکراری در فواصل منظم انجام دهید. این مثالی از تیکری است که تا وقتی متوقفش نکنیم، به‌طور دوره‌ای تیک می‌زند.

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

تیکرها از سازوکاری شبیه تایمرها استفاده می‌کنند: کانالی که مقادیری به آن فرستاده می‌شود. اینجا از select روی کانال استفاده می‌کنیم تا منتظر مقادیری بمانیم که هر ۵۰۰ میلی‌ثانیه می‌رسند.

    ticker := time.NewTicker(500 * time.Millisecond)
    done := make(chan bool)
    go func() {
        for {
            select {
            case <-done:
                return
            case t := <-ticker.C:
                fmt.Println("Tick at", t)
            }
        }
    }()

تیکرها را هم مثل تایمرها می‌توان متوقف کرد. وقتی تیکر متوقف شود، دیگر مقداری روی کانالش دریافت نمی‌کند. تیکر خودمان را پس از ۱۶۰۰ میلی‌ثانیه متوقف می‌کنیم.

    time.Sleep(1600 * time.Millisecond)
    ticker.Stop()
    done <- true
    fmt.Println("Ticker stopped")
}

وقتی این برنامه را اجرا کنیم، تیکر باید پیش از توقف ۳ بار تیک بزند.

$ go run tickers.go
Tick at 2012-09-23 11:29:56.487625 -0700 PDT
Tick at 2012-09-23 11:29:56.988063 -0700 PDT
Tick at 2012-09-23 11:29:57.488076 -0700 PDT
Ticker stopped

مثال بعدی: .