1 回答
TA贡献1934条经验 获得超2个赞
time.Time是一个结构。它的零值——尽管是一个有效的时间值——就像从未使用过一样。您可以利用零值时间来指示丢失或未定义的时间值。甚至有一种Time.IsZero()方法可以告诉您某个time.Time值是否为零值。
请注意,零值时间不是某些其他语言中的 1970 年 1 月 1 日,而是 1 年 1 月 1 日,正如您在 Go Playground上看到的那样。这也记录在time.Time:
Time 类型的零值为 1 年 1 月 1 日 00:00:00.000000000 UTC。由于这个时间在实践中不太可能出现,IsZero 方法提供了一种简单的方法来检测未明确初始化的时间。
此外,在创建Periodical值时,使用 keyed composite literal,您可以省略不想设置的字段,从而将它们保留为零值:
eachYear := Periodical{
Interval: interval.Years(1),
StartsAt: time.Date(1970, 1, 1, 0, 0, 0, 0, time.UTC),
}请注意,您不能time.Parse()在此复合文字中使用,因为它会返回 2 个值(atime.Time和 an error)。time.Date()要么像上面的例子一样使用,要么先创建时间值(处理错误),然后只使用时间值。
判断是否EndsAt指定:
if eachYear.EndsAt.IsZero() {
fmt.Println("EndsAt is missing")
}如果您需要将已设置(非零)的时间值归零,您可以使用time.Time{}复合文字:
eachYear.StartsAt = time.Time{}另请注意,当编组一个time.Time值时,即使它是零值(因为它是一个有效的时间值),即使您使用该选项,它也会被发送omitempty。在这些情况下,您必须使用*time.Time指针或编写自定义编组器。
- 1 回答
- 0 关注
- 210 浏览
添加回答
举报
