В 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! ⚡😈