【问题标题】:What is the `zero` value for time.Time in Go?Go 中 time.Time 的“零”值是多少?
【发布时间】:2014-05-27 22:24:30
【问题描述】:

在出现错误的情况下,我尝试返回nil,却抛出了错误:

cannot use nil as type time.Time in return argument

time.Timezero 值是多少?

【问题讨论】:

  • 你可以使用IsZero()来检测零时间。
  • 通常,当我想返回nil 以证明没有设置任何值时,我在函数签名中使用指针作为返回值。

标签: time go null


【解决方案1】:

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

【讨论】:

  • 的确,如果比较给定的时间值是否为nil,这才是真正应该使用的。
  • 虽然这是比较的正确答案,但 OP 并没有询问比较,而是询问如何初始化零值。接受的答案是正确的。
【解决方案2】:

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

fmt.Println(time.Time{})

输出是:

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

为了完整起见,official documentation 明确指出:

Time 类型的零值是第一年 1 月 1 日,00:00:00.000000000 UTC。

【讨论】:

  • “不传递参数”听起来像是一个函数调用。这是一个没有指定字段的结构文字。 X{} 是任何 X 的结构 X 的零值。
  • @RussCox 我认为这不是真的。就我而言,我的结构中有一个 time.Time 字段,它具有“omitempty”属性。如果我不设置该值,它会自动设置为 0001-01-01 00:00:00 +0000 UTC 而不是被忽略。
【解决方案3】:

time.Time 的零值是0001-01-01 00:00:00 +0000 UTChttp://play.golang.org/p/vTidOlmb9P

【讨论】:

    猜你喜欢
    • 2019-05-16
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 2021-12-30
    相关资源
    最近更新 更多