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?


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.


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


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.

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.