¿Cuál es el valor `cero` para el tiempo. Tiempo en Go?

157

En una condición de error, traté de regresar nil, lo que arroja el error:

cannot use nil as type time.Time in return argument

¿Cuál es el zerovalor de time.Time?

Mingyu
fuente
30
Y puede usar IsZero()para detectar el tiempo cero.
Matt

Respuestas:

156

Invocar un time.Timeliteral de estructura vacío devolverá la fecha cero de Go. Por lo tanto, para la siguiente declaración impresa:

fmt.Println(time.Time{})

El resultado es:

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

En aras de la exhaustividad, la documentación oficial establece explícitamente:

El valor cero del tipo Tiempo es el 1 de enero del año 1, 00: 00: 00.000000000 UTC.

zeantsoi
fuente
77
"No pasar argumentos" suena como una llamada a una función. Es una estructura literal sin campos especificados. X {} es el valor cero de la estructura X para cualquier X.
Russ Cox
1
@RussCox No creo que sea verdad. En mi caso, tengo un campo de tiempo. Tiempo en mi estructura que tiene el atributo 'omitempty'. Si no configuro ese valor, se establece automáticamente en 0001-01-01 00:00:00 +0000 UTC en lugar de ser ignorado.
Gaurav Ojha
303

En su lugar, debe usar la función 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.
gextra
fuente
De hecho, si se compara si el valor dado para el tiempo es nulo o no, esto es lo que realmente debería usarse.
Gaurav Ojha
77
Si bien esta es la respuesta correcta para la comparación, el OP no preguntó sobre la comparación, sino cómo inicializar el valor cero. La respuesta aceptada es correcta.
mikijov