首頁 >後端開發 >Golang >為什麼對於相同的 Go `time.Time` 結構, `==` 回傳 `false`?

為什麼對於相同的 Go `time.Time` 結構, `==` 回傳 `false`?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-17 21:50:16273瀏覽

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

為什麼 == 對於具有相同日期和時間的時間結構體回傳 false?

在 Go 中,time.Time 是一個包含欄位的結構體代表日期、時間和時區。使用 == 比較兩個 time.Time 值時,需要注意的是,不僅比較日期和時間,還比較位置。

== 運算子比較結構體的所有非空白字段,包括指向位置字段(*Location)的指針。雖然兩個位置可能代表相同的時區,但它們可能駐留在不同的記憶體位址。

因此,在比較共享相同日期和時間但在不同位置建立的兩個 time.Time 值時,此即使時刻相等,也會導致 == 傳回 false。

範例:

考慮以下內容code:

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)
}

這裡,t1 和t2 代表同一時刻,但t1 為UTC,而t2為本地時區。當使用 .Equal() 比較 t1 和 t2 時(忽略位置),傳回 true。但是,由於位置指標不同,使用 == 會產生 false。

解決方法:

嚴格地基於日期和時間來比較 time.Time 值。應使用 equal() 方法而不是 ==。或者,您可以透過呼叫 t.In(t.Location()) 來手動確保兩個 time.Time 值共用相同的位置指標。

以上是為什麼對於相同的 Go `time.Time` 結構, `==` 回傳 `false`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn