Jaka jest wartość „zero” dla time.Time in Go?

157

W stanie błędu próbowałem wrócić nil, co wyrzuca błąd:

cannot use nil as type time.Time in return argument

Jaka jest zerowartość time.Time?

Mingyu
źródło
30
Możesz użyć IsZero()do wykrycia czasu zerowego.
Matt,

Odpowiedzi:

156

Wywołanie pustego time.Timeliterału struktury zwróci datę zerową Go. W związku z tym dla następującego oświadczenia drukowania:

fmt.Println(time.Time{})

Wynik to:

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

Gwoli ścisłości oficjalna dokumentacja wyraźnie stwierdza:

Wartość zerowa typu Time to 1 stycznia, rok 1, 00: 00: 00.000000000 UTC.

zeantsoi
źródło
7
„Przekazywanie żadnych argumentów” sprawia, że ​​brzmi to jak wywołanie funkcji. Jest to literał strukturalny bez określonych pól. X {} jest zerową wartością struktury X dla dowolnego X.
Russ Cox
1
@RussCox Nie sądzę, że to prawda. W moim przypadku mam pole czasu - czas w mojej strukturze, która ma atrybut „omitempty”. Jeśli nie ustawię tej wartości, zostanie automatycznie ustawiona na 0001-01-01 00:00:00 + 0000 UTC zamiast ignorowania.
Gaurav Ojha
1
@GauravOjha Zobacz Golang JSON omitempty With time.Time Field .
icza
301

Zamiast tego należy użyć funkcji 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
źródło
Rzeczywiście, porównując, czy dana wartość czasu jest zerowa, czy też nie, to właśnie tego należy użyć.
Gaurav Ojha
7
Chociaż jest to poprawna odpowiedź do porównania, PO nie pytał o porównanie, ale raczej o to, jak zainicjować wartość zerową. Zaakceptowana odpowiedź jest prawidłowa.
mikijov