Was ist der Nullwert für time.Time in Go?

157

In einem Fehlerzustand habe ich versucht, zurückzukehren nil, was den Fehler auslöst:

cannot use nil as type time.Time in return argument

Wofür ist der zeroWert time.Time?

Mingyu
quelle
30
Und Sie können verwenden IsZero(), um die Nullzeit zu erkennen.
Matt

Antworten:

156

Wenn Sie ein leeres time.TimeStrukturliteral aufrufen, wird das Nulldatum von Go zurückgegeben. Also für die folgende Druckanweisung:

fmt.Println(time.Time{})

Die Ausgabe ist:

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

Der Vollständigkeit halber heißt es in der offiziellen Dokumentation ausdrücklich:

Der Nullwert vom Typ Zeit ist der 1. Januar, Jahr 1, 00: 00: 00.000000000 UTC.

zeantsoi
quelle
7
"Keine Argumente übergeben" klingt wie ein Funktionsaufruf. Es ist ein Strukturliteral ohne Felder. X {} ist der Nullwert der Struktur X für jedes X.
Russ Cox
1
@RussCox Ich glaube nicht, dass das stimmt. In meinem Fall habe ich ein Zeitfeld. Zeit in meiner Struktur, die das Attribut 'omitempty' hat. Wenn ich diesen Wert nicht einstelle, wird er automatisch auf 0001-01-01 00:00:00 +0000 UTC gesetzt, anstatt ignoriert zu werden.
Gaurav Ojha
1
@GauravOjha Siehe Golang JSON mit der Zeit weggelassen . Zeitfeld .
icza
301

Sie sollten stattdessen die Funktion Time.IsZero () verwenden:

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
quelle
Wenn man vergleicht, ob der angegebene Zeitwert Null ist oder nicht, sollte dies tatsächlich verwendet werden.
Gaurav Ojha
7
Während dies die richtige Antwort für den Vergleich ist, fragte das OP nicht nach dem Vergleich, sondern nach der Initialisierung des Nullwerts. Akzeptierte Antwort ist richtig.
Mikijov