Rumah >pembangunan bahagian belakang >Golang >`Masa.Masa` Pergi: Mengapa `==` Kadang-kadang Gagal Apabila Membandingkan Masa?

`Masa.Masa` Pergi: Mengapa `==` Kadang-kadang Gagal Apabila Membandingkan Masa?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-27 02:12:22494semak imbas

Go's `time.Time`: Why Does `==` Sometimes Fail When Comparing Times?

Membandingkan Struktur Masa: Mengapa Perbezaan vs Kesaksamaan

Masa.Masa, struct dalam Go, menempatkan bukan sahaja komponen masa (saat dan nanosaat) tetapi juga penunjuk lokasi . Dalam membandingkan contoh struct melalui ==, semua medan tertakluk kepada pemeriksaan.

Spesifikasi Go menentukan:

Struct values are comparable if all their fields are comparable. Two struct values are equal if their corresponding non-blank fields are equal.

Oleh itu, t1 == t2 membandingkan semua medan, termasuk lokasi, yang adalah petunjuk yang berbeza. Eksklusiviti ini adalah walaupun kedua-dua lokasi mewakili zon waktu yang sama.

Sebagai peringatan, dokumentasi masa.Masa memberi amaran terhadap penggunaan nilai Masa sebagai pengecam dalam peta atau pangkalan data tanpa menjamin lokasi yang konsisten. Penyelesaiannya terletak pada penggunaan kaedah UTC atau Setempat untuk memastikan penunjuk lokasi yang sama.

Sebagai alternatif, seseorang boleh memanfaatkan kaedah In() untuk mewujudkan penunjuk lokasi yang dikehendaki, seperti yang ditunjukkan dalam GoSpec.

Dengan menetapkan penunjuk lokasi yang setara, struktur Masa dengan komponen tarikh dan masa yang sama kini akan menghasilkan benar apabila dibandingkan melalui ==. Kaedah Equal() bagaimanapun, akan secara konsisten mengembalikan true tanpa mengira lokasi.

Atas ialah kandungan terperinci `Masa.Masa` Pergi: Mengapa `==` Kadang-kadang Gagal Apabila Membandingkan Masa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn