মূল কন্টেন্টে যান
মডিউল 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 ???
উত্তরের বিকল্প