Go by Example မြန်မာဘာသာ: Timers

ကျွန်တော်တို့က Go code ကို အနာဂတ်မှာ တစ်ချိန်ချိန်မှာ သို့မဟုတ် သတ်မှတ်ထားတဲ့ အချိန်ကြားတွေမှာ ထပ်ခါထပ်ခါ run ချင်တာ မကြာခဏ ရှိတတ်ပါတယ်။ Go ရဲ့ built-in timer နဲ့ ticker feature တွေက ဒီအလုပ်နှစ်ခုစလုံးကို လွယ်ကူစေပါတယ်။ ပထမဆုံး timer ကိုကြည့်ပြီး နောက်မှ ticker ကို ကြည့်ပါမယ်။

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

Timer တွေက အနာဂတ်မှာ ဖြစ်မယ့် event တစ်ခုကို ကိုယ်စားပြုပါတယ်။ သင်က timer ကို ဘယ်လောက်ကြာကြာ စောင့်ချင်လဲဆိုတာ ပြောပြပြီး အဲဒီအချိန်ရောက်ရင် အသိပေးမယ့် channel တစ်ခုကို ရပါတယ်။ ဒီ timer က 2 စက္ကန့် စောင့်ပါမယ်။

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

<-timer1.C က timer ရဲ့ channel C ပေါ်မှာ block လုပ်ထားပြီး timer fired ဖြစ်ကြောင်း ညွှန်ပြတဲ့ တန်ဖိုးတစ်ခု ပို့လာတဲ့အထိ စောင့်ပါတယ်။

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

အကယ်၍ စောင့်ဆိုင်းချင်ရုံသက်သက်ဆိုရင် time.Sleep ကိုလည်း သုံးနိုင်ပါတယ်။ Timer သုံးတာရဲ့ အကျိုးကျေးဇူးတစ်ခုကတော့ timer မ fired ခင် cancel လုပ်လို့ရတာပါ။ အောက်မှာ ဥပမာတစ်ခု ပြထားပါတယ်။

    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 က တကယ်လို့ အလုပ်လုပ်မယ်ဆိုရင် လုပ်နိုင်အောင် လုံလောက်တဲ့အချိန်ပေးထားပါတယ်။ ဒါပေမယ့် တကယ်တမ်း ရပ်တန့်သွားပြီ (stop) ဆိုတာကိုပြတာပါ။

    time.Sleep(2 * time.Second)
}

ပထမ timer က ပရိုဂရမ်စတင်ပြီး ~2 စက္ကန့်လောက်မှာ အလုပ်လုပ်ပါလိမ့်မယ်၊ ဒါပေမယ့် ဒုတိယ timer ကတော့ အလုပ်လုပ်ဖို့ အခွင့်အရေးမရခင် ရပ်တန့်သွားပါလိမ့်မယ်။

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

နောက်ဥပမာ: Tickers.