Что такое «нулевое» значение для time.Time в Go?

157

В состоянии ошибки, я попытался вернуться nil, который выдает ошибку:

cannot use nil as type time.Time in return argument

Какое zeroзначение для time.Time?

Mingyu
источник
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.

zeantsoi
источник
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.
gextra
источник
Действительно, если сравнивать, является ли данное значение времени нулевым или нет, это то, что на самом деле следует использовать.
Гаурав
7
Хотя это правильный ответ для сравнения, OP не спрашивал о сравнении, а скорее о том, как инициализировать нулевое значение. Принятый ответ правильный.
микиов