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?


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.


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


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.

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.