Rumah > pembangunan bahagian belakang > Golang > Mengapakah `==` Mengembalikan `palsu` untuk Struktur `masa.Masa` Identical Go?

Mengapakah `==` Mengembalikan `palsu` untuk Struktur `masa.Masa` Identical Go?

Mary-Kate Olsen
Lepaskan: 2024-12-17 21:50:16
asal
358 orang telah melayarinya

Why Does `==` Return `false` for Identical Go `time.Time` Structs?

Mengapa == mengembalikan palsu untuk struct masa dengan tarikh dan masa yang sama?

In Go, time.Time ialah struct dengan medan mewakili tarikh, masa dan zon masa. Apabila membandingkan dua nilai masa. Masa menggunakan ==, adalah penting untuk ambil perhatian bahawa bukan sahaja tarikh dan masa tetapi juga lokasi dibandingkan.

Pengendali == membandingkan semua medan bukan kosong bagi sesuatu struct, termasuk penunjuk ke medan lokasi (*Lokasi). Walaupun dua lokasi mungkin mewakili zon waktu yang sama, ia mungkin berada di alamat memori yang berbeza.

Akibatnya, apabila membandingkan dua masa. Nilai masa yang berkongsi tarikh dan masa yang sama tetapi dicipta di lokasi yang berbeza, ini menghasilkan == mengembalikan palsu walaupun sesaat masa adalah setara.

Contoh:

Pertimbangkan kod berikut:

import (
    "fmt"
    "time"
)

func main() {
    t1 := time.Date(2016, 4, 14, 1, 30, 30, 222000000, time.UTC)
    t2 := time.Date(2016, 4, 14, 1, 30, 30, 222000000, time.Local)

    fmt.Println(t1.Equal(t2)) // true (compares date and time only)
    fmt.Println(t1 == t2)      // false (also compares location pointers)
}
Salin selepas log masuk

Di sini, t1 dan t2 mewakili detik masa yang sama, tetapi t1 berada dalam UTC manakala t2 berada dalam zon waktu tempatan. Apabila membandingkan t1 dan t2 menggunakan .Equal(), yang mengabaikan lokasi, true dikembalikan. Walau bagaimanapun, menggunakan == menghasilkan palsu kerana penunjuk lokasi yang berbeza.

Penyelesaian:

Untuk membandingkan masa. Nilai masa hanya berdasarkan tarikh dan masa, masa. Kaedah Equal() harus digunakan dan bukannya ==. Sebagai alternatif, anda boleh memastikan secara manual kedua-dua nilai masa. Masa berkongsi penunjuk lokasi yang sama dengan memanggil t.In(t.Location()) padanya.

Atas ialah kandungan terperinci Mengapakah `==` Mengembalikan `palsu` untuk Struktur `masa.Masa` Identical Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan