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 關注
- 119 瀏覽
添加回答
舉報