Яке значення "нуль" для time.Time in Go?


157

У стані помилки я намагався повернутись nil, який видаляє помилку:

cannot use nil as type time.Time in return argument

Для чого zeroзначенняtime.Time ?


30
І ви можете використовувати IsZero()для виявлення нульового часу.
Метт

Відповіді:


156

Виклик порожнього time.Timeструктурного букваря поверне нульову дату Go. Таким чином, для наступного друку заяви:

fmt.Println(time.Time{})

Вихід:

0001-01-01 00:00:00 +0000 UTC

Для повноти в офіційній документації прямо зазначено:

Нульове значення типу Час - 1 січня, рік 1, 00: 00: 00.000000000 UTC.


7
"Не передаючи аргументів", це звучить як виклик функції. Це структура літерал без вказаних полів. X {} - нульове значення структури X для будь-якого X.
Russ Cox,

1
@RussCox Я не думаю, що це правда. У моєму випадку у мене є поле часу. Час у моїй структурі, який має атрибут 'omitempty'. Якщо я не встановлю це значення, воно автоматично встановлюється на 0001-01-01 00:00:00 +0000 UTC, а не ігнорується.
Gaurav Ojha

1
@GauravOjha Дивіться Golang JSON omitempty With time.Time Field .
icza

301

Ви повинні використовувати функцію Time.IsZero () замість:

func (Time) IsZero

func (t Time) IsZero() bool
IsZero reports whether t represents the zero time instant, January 1, year 1, 00:00:00 UTC.

Дійсно, якщо порівнювати, чи дане значення часу є нульовим, чи ні, це насправді слід використовувати.
Gaurav Ojha

7
Хоча це правильна відповідь для порівняння, ОП не запитувала про порівняння, а як ініціалізувати нульове значення. Прийнята відповідь правильна.
mikijov

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.