Go 中的時間比較
比較Go 中的時間時,考慮與時區和單調時鐘讀數相關的潛在細微差別至關重要。相等運算子 (==) 不僅比較時間實例,還比較位置和單調時鐘讀數。
為了說明這一點,請考慮以下程式碼:
<code class="go">expect := time.Date(2016, 12, 12, 1, 2, 3, 4, wib) t1 := time.Date(2016, 12, 12, 1, 2, 3, 4, time.UTC) res := GenerateWIB(t1) if res != expect { fmt.Printf("WIB Expect %+v, but get %+v", expect, res) }</code>
在此場景中,比較res !=expect 將永遠計算為true,即使res 和expect 表示的實際時間相同。這是因為 Time 結構體的內部欄位(代表牆上時間、延長時間、位置和單調時鐘讀數)對於每個實例都是不同的。
要正確比較時間,建議使用 res.Equal(expect) 方法,該方法考慮了內部欄位之間的潛在差異並提供更準確的比較。 Equal 方法的文檔指出:
「請注意,Go == 運算子不僅比較時間瞬間,還比較位置和單調時鐘讀數。因此,時間值不應用作地圖或資料庫鍵無需首先保證為所有值設定相同的位置,這可以透過使用UTC 或Local 方法來實現,並且透過設定t = t.Round(0) 已移除單調時脈讀數。您可以確保比較僅基於時刻,並忽略位置或單調時鐘讀數中的任何潛在差異。
以上是如何在 Go 中準確比較時間:什麼時候應該使用 `Equal()` 而不是 `==`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!