為什麼 == 對於具有相同日期和時間的時間結構體回傳 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中文網其他相關文章!