Qual è il valore `zero` per time.Time in Go?


157

In una condizione di errore, ho provato a restituire nil, che genera l'errore:

cannot use nil as type time.Time in return argument

Qual è il zerorapporto qualità- time.Time?


30
E puoi usare IsZero()per rilevare il tempo zero.
Matt,

Risposte:


156

Invocare un valore time.Timeletterale vuoto restituirà la data zero di Go. Pertanto, per la seguente dichiarazione di stampa:

fmt.Println(time.Time{})

L'output è:

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

Per completezza, la documentazione ufficiale afferma esplicitamente:

Il valore zero di tipo Time è 1 gennaio, anno 1, 00: 00: 00.000000000 UTC.


7
"Non passare argomenti" suona come una chiamata di funzione. È una struttura letterale senza campi specificati. X {} è il valore zero della struttura X per qualsiasi X.
Russ Cox

1
@RussCox Non penso sia vero. Nel mio caso, ho un campo di tempo. Tempo nella mia struttura che ha l'attributo 'omitempty'. Se non imposto quel valore, viene automaticamente impostato su 0001-01-01 00:00:00 +0000 UTC invece di essere ignorato.
Gaurav Ojha,


303

Dovresti invece usare la funzione 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.

In effetti, se si confronta se il valore dato per il tempo è zero o no, questo è ciò che dovrebbe essere effettivamente utilizzato.
Gaurav Ojha,

7
Sebbene questa sia la risposta corretta per il confronto, l'OP non ha chiesto il confronto, ma piuttosto come inizializzare il valore zero. La risposta accettata è corretta
mikijov

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.