முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
தொகுதி 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 2_TO வகை.

பாகுபடுத்துதல் மற்றும் வடிவமைத்தல்: குறிப்பு தளவமைப்பு

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 ** மோனோடோனிக் கடிகாரத்தைப் பயன்படுத்துகிறது செயல்திறன் அளவீடுகளுக்கு நீங்கள் விரும்புவது இதுதான்.

டைமர் மற்றும் டிக்கர்

  • time.After(d) dக்குப் பிறகு ஒருமுறை மட்டுமே பெறும் chan time.Time ஐ வழங்குகிறது. 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 க்கும் மீண்டும் மீண்டும் அனுப்புகிறது. Goroutine கசிவுகளைத் தவிர்க்க 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ஏற்றுகிறது…

எவ்வளவு நேரம் ஆகும் என்பதை அளவிடவும். 10 நிமிட தூக்கம் நேரத்தைப் பயன்படுத்தி எடுக்கிறது. அதிலிருந்து முடிவை அச்சிடவும்.

எடிட்டரை ஏற்றுகிறது…

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

Quiz#go.m8.l4.e3
தயார்

மாறிலி `நேரம்.இரண்டாம்` என்பது என்ன?

Go
d := time.Second
// d ha tipo ???
பதில் விருப்பங்கள்