Что такое «нулевое» значение для time.Time в 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

Для полноты официальной документации прямо говорится:

Нулевым значением типа Time является 1 января, год 1, 00: 00: 00.000000000 UTC.


7
«Без аргументов» звучит как вызов функции. Это структурный литерал без заданных полей. X {} - нулевое значение struct X для любого X.
Russ Cox

1
@RussCox Я не думаю, что это правда. В моем случае у меня есть поле time.Time в моей структуре, которое имеет атрибут «omitempty». Если я не установлю это значение, оно будет автоматически установлено на 0001-01-01 00:00:00 +0000 UTC вместо того, чтобы игнорироваться.
Гаурав Ойха


303

Вместо этого вы должны использовать функцию 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.

Действительно, если сравнивать, является ли данное значение времени нулевым или нет, это то, что на самом деле следует использовать.
Гаурав

7
Хотя это правильный ответ для сравнения, OP не спрашивал о сравнении, а скорее о том, как инициализировать нулевое значение. Принятый ответ правильный.
микиов

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.