ماڈیول اسباق (4/5)
'وقت' پیکیج
time پیکیج تین الگ الگ تصورات پیش کرتا ہے: فوری (time.Time)، دورانیہ (time.Duration) اور متواتر ٹولز (ٹائمر، ٹکر)۔ ان میں فرق کرنا بہت ضروری ہے: ایک فوری ٹائم لائن پر ایک نقطہ ہے، ایک دورانیہ ایک وقفہ ہے۔
time.Time — فوری
now := time.Now() // current instant in the local timezone
utc := now.UTC() // same instant in UTC
later := now.Add(2 * time.Hour) // add a duration
diff := later.Sub(now) // 2h0m0s (it's a Duration)
fmt.Println(now.Year(), now.Month(), now.Day())
fmt.Println(now.Weekday())time.Time غیر متغیر ہے: تمام طریقے Add، Truncate، Round ایک نیا Time واپس کرتے ہیں۔
انسٹنٹ کا موازنہ کرنے کے لیے Before، After، Equal استعمال کریں۔ ** ==** استعمال نہ کریں اگر انسٹنٹ میں مختلف ٹائم زونز/ مونوٹونک گھڑیاں ہوسکتی ہیں۔
time.Duration — وقفے
d := 250 * time.Millisecond
fmt.Println(d) // 250ms
fmt.Println(d.Seconds()) // 0.25 (float64)
const timeout = 5 * time.Secondtime.Duration int64 کا ایک عرف ہے جو نانو سیکنڈز شمار کرتا ہے۔ مستقل time.Nanosecond, time.Microsecond, time.Millisecond, time.Second, time.Minute, time.Hour قسم کے ہیں time.Hour
تجزیہ اور فارمیٹنگ: حوالہ لے آؤٹ
Go YYYY-MM-DD جیسی تاریں استعمال نہیں کرتا ہے۔ یہ ایک کیننیکل حوالہ فوری استعمال کرتا ہے:
Mon Jan 2 15:04:05 MST 2006یعنی 01/02 03:04:05PM '06 -0700 اس ترتیب کو یاد رکھ کر (میمونک: 1-2-3-4-5-6-7) آپ کسی بھی تاریخ کو فارمیٹ کر سکتے ہیں:
const layout = "2006-01-02 15:04:05"
s := time.Now().Format(layout) // "2026-05-16 14:30:00"
t, err := time.Parse(layout, "2026-05-16 14:30:00")stdlib ریڈی میڈ لے آؤٹ پیش کرتا ہے: time.RFC3339 ("2006-01-02T15:04:05Z07:00"), time.RFC1123, time.Kitchen ("3:04PM")۔
fmt.Println(time.Now().Format(time.RFC3339))وقت کی پیمائش
start := time.Now()
work()
elapsed := time.Since(start) // = time.Now().Sub(start)
fmt.Println("ci ha messo", elapsed)time.Since مونوٹونک کلاک استعمال کرتا ہے: یہ سسٹم کلاک ایڈجسٹمنٹ (NTP، دن کی روشنی کی بچت) سے پریشان نہیں ہوتا ہے۔ کارکردگی کی پیمائش کے لیے یہی آپ چاہتے ہیں۔
ٹائمر اور ٹکر
time.After(d)ایکchan time.Timeلوٹاتا ہے جوdکے بعد صرف ایک بار وصول کرتا ہے۔selectمیں مفید:
select {
case res := <-ch:
fmt.Println("ok", res)
case <-time.After(2 * time.Second):
return errors.New("timeout")
}time.NewTimer(d)ایک روکا جا سکتا ہے (t.Stop())۔time.NewTicker(d)ہرdکو بار بار بھیجتا ہے۔ گروٹن لیکس سے بچنے کے لیےdefer ticker.Stop()کو یاد رکھیں۔
ticker := time.NewTicker(time.Second)
defer ticker.Stop()
for range ticker.C {
fmt.Println("tick")
}مشقیں
وقت کے مطابق موجودہ فوری فارمیٹ پرنٹ کریں۔RFC3339۔
3 کوششوں کے بعد حل دستیاب ہے۔
وقت کی پیمائش کریں۔ 10ms کی نیند میں وقت لگتا ہے۔ چونکہ نتیجہ پرنٹ کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔
مستقل `ٹائم۔ سیکنڈ` کس قسم کی ہے؟
d := time.Second
// d ha tipo ???