Avatar ·

¿Cuál es el valor cero (zero value) de time.Time en Go y cómo verificar si una variable de tiempo está vacía?

¡Hola a todos! Acabo de empezar a aprender Go y me encontré con una situación confusa al trabajar con el tipo time.Time.

Tengo una estructura para almacenar datos de usuario:

type User struct {
    ID        int
    Name      string
    CreatedAt time.Time
    UpdatedAt time.Time
}

Cuando creo un nuevo usuario sin especificar explícitamente la hora, espero que los campos CreatedAt y UpdatedAt sean null o nil, como en otros lenguajes (Java, C#). Pero en Go no puedo asignarles nil — el compilador se queja.

Intenté esto:

var u User
fmt.Println(u.CreatedAt) // Muestra: 0001-01-01 00:00:00 +0000 UTC
fmt.Println(u.CreatedAt == nil) // Error de compilación: cannot convert nil to type time.Time

Preguntas:

  1. ¿Cuál es el valor por defecto (zero value) de time.Time?
  2. ¿Por qué no es nil?
  3. ¿Cómo