Avatar ·

Quelle est la valeur zéro (zero value) de time.Time en Go et comment vérifier si une variable de temps est vide ?

Bonjour à tous ! Je viens de commencer à apprendre Go et je suis confronté à une situation confuse en travaillant avec le type time.Time.

J'ai une structure pour stocker les données d'un utilisateur :

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

Lorsque je crée un nouvel utilisateur sans spécifier explicitement l'heure, je m'attends à ce que les champs CreatedAt et UpdatedAt soient null ou nil, comme dans d'autres langages (Java, C#). Mais en Go, je ne peux pas leur assigner nil — le compilateur génère une erreur.

J'ai essayé ceci :

var u User
fmt.Println(u.CreatedAt) // Affiche : 0001-01-01 00:00:00 +0000 UTC
fmt.Println(u.CreatedAt == nil) // Erreur de compilation : cannot convert nil to type time.Time

Questions :

  1. Quelle est la valeur par défaut (zero value) de time.Time ?
  2. Pourquoi n'est-ce pas nil ?
  3. Comment