В Go пакет time — это мощный инструмент для работы со временем. Разберём все основные вещи, чтобы ты мог быть королём времени в коде.
1. Основные структуры в time 📌
-
time.Time— представляет момент времени (дата + время). -
time.Duration— длительность времени (например,2*time.Second). -
time.Timer— таймер, который сработает через определённое время. -
time.Ticker— тикер, который повторяется через равные интервалы.
2. time.Duration — работа с промежутками времени⏳
time.Duration — это int64, представляющий наносекунды, но удобен для любых промежутков.
Примеры:
d1 := 5 * time.Second // 5 секунд
d2 := 100 * time.Millisecond // 100 мс
d3 := 2 * time.Hour // 2 часа
3. time.Time — работа с датами и временем🕰
Создание времени:
now := time.Now() // Текущее время
t := time.Date(2024, time.February, 10, 12, 0, 0, 0, time.UTC)
Разбор времени:
4. time.Sleep — паузы в коде⏳
5. time.Timer — сработает через время⏲
6. time.Ticker — повторение через интервалы🔄
Если тебе надо что-то выполнять каждые N секунд, используй Ticker:
`ticker := time.NewTicker(1 * time.Second) ` `defer ticker.Stop() ` `for i := 0; i < 5; i++ { ` ` <-ticker.C `` fmt.Println("Прошла секунда!") ` `}`
Остановить Ticker:
7. Парсинг и форматирование времени🎭
В Go используются специальные референсные даты, а не маски (да, это странно, но мощно):
|Эталонная дата Go|Mon Jan 2 15:04:05 MST 2006|
|---|---|
|Год (2006)|2006|
|Месяц (Jan)|01 или January|
|День (2)|02 или 2|
|Часы (15)|15 (24ч) или 03PM (12ч)|
|Минуты (04)|04|
|Секунды (05)|05|
|Часовой пояс (MST)|MST или -0700|
Форматирование (Format)
fmt.Println(time.Now().Format("2006-01-02 15:04:05")) // YYYY-MM-DD HH:MM:SS fmt.Println(time.Now().Format("02 Jan 2006 15:04")) // 10 Feb 2024 12:00
Парсинг (Parse)
layout := "2006-01-02 15:04:05" t, err := time.Parse(layout, "2024-02-10 12:00:00") if err != nil { log.Fatal(err) } fmt.Println(t)
8. Часовые пояса⏳
loc, _ := time.LoadLocation("America/New_York")
t := time.Now().In(loc)
fmt.Println(t)
9. Запуск кода по расписанию (time.AfterFunc)🎯
time.AfterFunc(3*time.Second, func() {
fmt.Println("Прошло 3 секунды!")
})
time.Sleep(5 * time.Second) // Ждём, чтобы увидеть результат
Заключение
time
Всё, теперь ты повелитель времени в Go! ⚡😈