Avatar ·

Go中time.Time的零值是什么,以及如何检查时间变量是否为空?

大家好!我刚开始学习Go,在处理time.Time类型时遇到了一个令人困惑的情况。

我有一个用于存储用户数据的结构体:

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

当我创建一个没有显式指定时间的新用户时,我期望CreatedAt和UpdatedAt字段像其他语言(Java、C#)中那样是null或nil。但在Go中,我无法为它们赋值nil——编译器会报错。

我尝试了这样:

var u User
fmt.Println(u.CreatedAt) // 输出:0001-01-01 00:00:00 +0000 UTC
fmt.Println(u.CreatedAt == nil) // 编译错误:cannot convert nil to type time.Time

问题:

  1. time.Time的默认值(zero value)是什么?
  2. 为什么它不是nil?
  3. 如何