Berapa nilai `nol` untuk waktu.Time in Go?

157

Dalam kondisi kesalahan, saya mencoba untuk kembali nil, yang melempar kesalahan:

cannot use nil as type time.Time in return argument

Untuk apa zeronilainya time.Time?

Mingyu
sumber
30
Dan Anda dapat menggunakan IsZero()untuk mendeteksi waktu nol.
Matt

Jawaban:

156

Meminta time.Timestruct literal kosong akan mengembalikan tanggal nol Go. Jadi, untuk pernyataan cetak berikut:

fmt.Println(time.Time{})

Outputnya adalah:

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

Demi kelengkapan, dokumentasi resmi secara eksplisit menyatakan:

Nilai nol dari tipe Waktu adalah 1 Januari, tahun 1, 00: 00: 00.000000000 UTC.

zeantsoi
sumber
7
"Passing no argumen" membuatnya terdengar seperti pemanggilan fungsi. Ini adalah struct literal tanpa bidang yang ditentukan. X {} adalah nilai nol dari struct X untuk semua X.
Russ Cox
1
@RussCox Saya tidak berpikir itu benar. Dalam kasus saya, saya memiliki bidang waktu. Waktu di struct saya yang memiliki atribut 'omitempty'. Jika saya tidak menetapkan nilai itu, maka akan secara otomatis diatur ke 0001-01-01 00:00:00 +0000 UTC alih-alih diabaikan.
Gaurav Ojha
1
@GauravOjha Melihat Golang JSON kemakmuran Dengan waktu . Bidang Waktu .
icza
303

Anda harus menggunakan fungsi Time.IsZero () sebagai gantinya:

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.
gextra
sumber
Memang, jika membandingkan apakah nilai waktu yang diberikan adalah nol atau tidak, inilah yang sebenarnya harus digunakan.
Gaurav Ojha
7
Meskipun ini adalah jawaban yang benar untuk perbandingan, OP tidak bertanya tentang perbandingan, tetapi bagaimana menginisialisasi nilai nol. Jawaban yang diterima benar.
mikijov