Avatar ·

Qual é o valor zero de time.Time em Go e como verificar se uma variável de tempo está vazia?

Olá a todos! Acabei de começar a estudar Go e me deparei com uma situação confusa ao trabalhar com o tipo time.Time.

Tenho uma struct para armazenar dados do usuário:

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

Quando crio um novo usuário sem especificar explicitamente o tempo, espero que os campos CreatedAt e UpdatedAt sejam null ou nil, como em outras linguagens (Java, C#). Mas em Go não posso atribuir nil a eles — o compilador reclama.

Tentei assim:

var u User
fmt.Println(u.CreatedAt) // Exibe: 0001-01-01 00:00:00 +0000 UTC
fmt.Println(u.CreatedAt == nil) // Erro de compilação: cannot convert nil to type time.Time

Perguntas:

  1. Qual é o valor padrão (zero value) de time.Time?
  2. Por que não é nil?
  3. Como