Giá trị `zero` cho thời gian. Thời gian trong Go là gì?


157

Trong một điều kiện lỗi, tôi đã cố gắng quay lại nil, nó sẽ ném lỗi:

cannot use nil as type time.Time in return argument

Là gì zerogiá trị cho time.Time?


30
Và bạn có thể sử dụng IsZero()để phát hiện thời gian bằng không.
Matt

Câu trả lời:


156

Gọi một time.Timecấu trúc trống rỗng theo nghĩa đen sẽ trả về ngày không của Go. Do đó, đối với câu lệnh in sau:

fmt.Println(time.Time{})

Đầu ra là:

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

Để hoàn thiện, tài liệu chính thức nêu rõ:

Giá trị 0 của loại Thời gian là ngày 1 tháng 1 năm 1, 00: 00: 00.000000000 UTC.


7
"Không có đối số" làm cho nó nghe giống như một cuộc gọi chức năng. Đó là một cấu trúc theo nghĩa đen không có trường được chỉ định. X {} là giá trị 0 của cấu trúc X cho bất kỳ X.
Russ Cox

1
@RussCox Tôi không nghĩ đó là sự thật. Trong trường hợp của tôi, tôi có một trường thời gian. Thời gian trong cấu trúc của tôi có thuộc tính 'omitempty'. Nếu tôi không đặt giá trị đó, nó sẽ tự động được đặt thành 0001-01-01 00:00:00 +0000 UTC thay vì bị bỏ qua.
Gaurav Ojha


301

Bạn nên sử dụng hàm Time.IsZero () thay thế:

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.

Thật vậy, nếu so sánh xem giá trị đã cho theo thời gian có phải là con số không hay không, thì đây là thứ thực sự nên được sử dụng.
Gaurav Ojha

7
Mặc dù đây là câu trả lời chính xác để so sánh, OP không hỏi về so sánh, mà là cách khởi tạo giá trị 0. Câu trả lời được chấp nhận là chính xác.
mikijov

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.