Quelle est la valeur «zéro» pour time.Time in Go?

157

Dans une condition d'erreur, j'ai essayé de revenir nil, ce qui lève l'erreur:

cannot use nil as type time.Time in return argument

Quelle est la zerovaleur time.Time?

Mingyu
la source
30
Et vous pouvez utiliser IsZero()pour détecter le temps zéro.
mat

Réponses:

156

L'appel d'un time.Timelittéral struct vide renverra la date zéro de Go. Ainsi, pour l'instruction d'impression suivante:

fmt.Println(time.Time{})

La sortie est:

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

Par souci d'exhaustivité, la documentation officielle indique explicitement:

La valeur zéro de type Time est le 1er janvier, année 1, 00: 00: 00.000000000 UTC.

zeantsoi
la source
7
"Ne pas passer d'arguments" le fait sonner comme un appel de fonction. C'est un littéral struct sans champ spécifié. X {} est la valeur zéro de la structure X pour tout X.
Russ Cox
1
@RussCox Je ne pense pas que ce soit vrai. Dans mon cas, j'ai un champ time.Time dans ma structure qui a l'attribut 'omitempty'. Si je ne règle pas cette valeur, elle est automatiquement définie sur 0001-01-01 00:00:00 +0000 UTC au lieu d'être ignorée.
Gaurav Ojha le
1
@GauravOjha Voir Golang JSON omitempty With time.Time Field .
icza
303

Vous devez utiliser la fonction Time.IsZero () à la place:

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
la source
En effet, si l'on compare si la valeur donnée pour le temps est nulle ou non, c'est ce qui devrait réellement être utilisé.
Gaurav Ojha
7
Bien que cette réponse soit correcte pour la comparaison, l'OP n'a pas posé de questions sur la comparaison, mais plutôt sur la manière d'initialiser la valeur zéro. La réponse acceptée est correcte.
mikijov