مرکزی مواد پر جائیں
ماڈیول 8 · سبق 4 از 5کورس میں 39/50~12 min
ماڈیول اسباق (4/5)

'وقت' پیکیج

time پیکیج تین الگ الگ تصورات پیش کرتا ہے: فوری (time.Time)، دورانیہ (time.Duration) اور متواتر ٹولز (ٹائمر، ٹکر)۔ ان میں فرق کرنا بہت ضروری ہے: ایک فوری ٹائم لائن پر ایک نقطہ ہے، ایک دورانیہ ایک وقفہ ہے۔

time.Time — فوری

Go
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 — وقفے

Go
d := 250 * time.Millisecond
fmt.Println(d)         // 250ms
fmt.Println(d.Seconds()) // 0.25 (float64)

const timeout = 5 * time.Second

time.Duration int64 کا ایک عرف ہے جو نانو سیکنڈز شمار کرتا ہے۔ مستقل time.Nanosecond, time.Microsecond, time.Millisecond, time.Second, time.Minute, time.Hour قسم کے ہیں time.Hour

تجزیہ اور فارمیٹنگ: حوالہ لے آؤٹ

Go YYYY-MM-DD جیسی تاریں استعمال نہیں کرتا ہے۔ یہ ایک کیننیکل حوالہ فوری استعمال کرتا ہے:

Code
Mon Jan 2 15:04:05 MST 2006

یعنی 01/02 03:04:05PM '06 -0700 اس ترتیب کو یاد رکھ کر (میمونک: 1-2-3-4-5-6-7) آپ کسی بھی تاریخ کو فارمیٹ کر سکتے ہیں:

Go
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")۔

Go
fmt.Println(time.Now().Format(time.RFC3339))

وقت کی پیمائش

Go
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 میں مفید:
Go
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() کو یاد رکھیں۔
Go
ticker := time.NewTicker(time.Second)
defer ticker.Stop()
for range ticker.C {
    fmt.Println("tick")
}

مشقیں

ورزش#go.m8.l4.e1
کوششیں: 0لوڈ ہو رہا ہے…

وقت کے مطابق موجودہ فوری فارمیٹ پرنٹ کریں۔RFC3339۔

ایڈیٹر لوڈ ہو رہا ہے…

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش#go.m8.l4.e2
کوششیں: 0لوڈ ہو رہا ہے…

وقت کی پیمائش کریں۔ 10ms کی نیند میں وقت لگتا ہے۔ چونکہ نتیجہ پرنٹ کریں۔

ایڈیٹر لوڈ ہو رہا ہے…

3 کوششوں کے بعد حل دستیاب ہے۔

Quiz#go.m8.l4.e3
تیار

مستقل `ٹائم۔ سیکنڈ` کس قسم کی ہے؟

Go
d := time.Second
// d ha tipo ???
جواب کے اختیارات