Go中的time的零值是多少?


157

在错误情况下,我尝试返回nil,从而引发错误:

cannot use nil as type time.Time in return argument

有什么zero价值time.Time


30
您可以IsZero()用来检测零时间。
马特

Answers:


156

调用空的time.Time结构文字将返回Go的零日期。因此,对于以下打印语句:

fmt.Println(time.Time{})

输出为:

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

为了完整起见,官方文档明确声明:

时间类型的零值为1年1月1日,00:00:00.000000000 UTC。


7
“不传递任何参数”使其听起来像一个函数调用。这是未指定任何字段的结构文字。X {}是该结构X为任何X的零值
拉斯考克斯

1
@RussCox我认为那不是真的。就我而言,我的结构中有一个time.Time字段,具有'omitempty'属性。如果我未设置该值,它将自动设置为0001-01-01 00:00:00 +0000 UTC,而不是被忽略。
Gaurav Ojha


301

您应该改用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.

确实,如果比较给定的时间值是否为零,则实际上应该使用此值。
Gaurav Ojha'2

7
尽管这是比较的正确答案,但OP并未询问比较,而是询问如何初始化零值。接受的答案是正确的。
mikijov

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.