Goのtime.Timeの「ゼロ」値とは何ですか?


157

エラー状態でを返そうとするとnil、エラーがスローされます。

cannot use nil as type time.Time in return argument

zero価値はtime.Time何ですか?


30
またIsZero()、ゼロ時間の検出に使用できます。
マット

回答:


156

空のtime.Time構造体リテラルを呼び出すと、Goのゼロ日付が返されます。したがって、次の印刷ステートメントの場合:

fmt.Println(time.Time{})

出力は次のとおりです。

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

完全を期すために、公式ドキュメントには次のように明記されています。

タイプTimeのゼロ値は、1年1月1日00:00:00.000000000 UTCです。


7
「引数を渡さない」は、関数呼び出しのように聞こえます。フィールドが指定されていない構造体リテラルです。X {}は、任意のXの構造体Xのゼロ値である
ラスコックス

1
@RussCox真実ではないと思います。私の場合、構造体に「omitempty」属性を持つtime.Timeフィールドがあります。その値を設定しない場合、無視される代わりに、自動的に0001-01-01 00:00:00 +0000 UTCに設定されます。
Gaurav Ojha 2016

1
@GauravOjha Golang JSON omitempty With time.Time Fieldを参照してください。
icza 2017年

303

代わりに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かどうかを比較する場合、これは実際に使用されるべきものです。
Gaurav Ojha 2017

7
これは比較に対する正解ですが、OPは比較についてではなく、ゼロ値を初期化する方法を尋ねました。正解は正解です。
mikijov

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.