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?


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.


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


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.

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.