亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Golang 中的編組/解組時間對象意外失敗

Golang 中的編組/解組時間對象意外失敗

Go
ibeautiful 2023-03-29 16:14:18
解組編組的時間對象失敗,因為有幾個字符測試聲明如下:// valuesnow := time.Now()timeToJSON, _ := json.Marshal(now)var obj time.Timejson.Unmarshal(timeToJSON, &obj)然后執行以下測試邏輯:if !assert.Equal(t,    now.String(),    obj.String()) {    t.FailNow()}預期的測試通過,兩個對象相等實際的它失敗:--- FAIL: TestFromJSON (0.00s)    D:\dev2017\GO\src\ezsoft\apiserver_sdk\model\delete\deleteModel_test.go:94:             Error Trace:    deleteModel_test.go:94            Error:          Not equal:                             expected: "2018-09-04 10:36:18.3627338 -0400 EDT m=+0.014000801"                            actual  : "2018-09-04 10:36:18.3627338 -0400 EDT"                                                        Diff:                            --- Expected                            +++ Actual                            @@ -1 +1 @@                            -2018-09-04 10:36:18.3627338 -0400 EDT m=+0.014000801                            +2018-09-04 10:36:18.3627338 -0400 EDT            Test:           TestFromJSONFAILFAIL    ezsoft/apiserver_sdk/model/delete   1.336sError: Tests failed.筆記我注意到,在檢查輸出時,不知何故,一些m=+[blah]被附加到預期/實際。但是,我不知道為什么,瀏覽 RFC 3339也沒有給我任何提示。
查看完整描述

2 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

根據文檔,該m值是單調時鐘值,可以將其刪除用于Truncate比較而不是出于計時目的。該m字段不匹配,因為它從 JSON 中省略,它僅由time.Now().


像這樣嘗試:


// values

now := time.Now().Truncate(0)? // Truncate to remove monotonic clock portion

timeToJSON, _ := json.Marshal(now)

var obj time.Time

json.Unmarshal(timeToJSON, &obj)

添加單調時鐘偏移是為了允許準確計時跨越掛鐘更改(例如 NTP 更新、DST 更改或閏秒/拖尾)的持續時間。


查看完整回答
反對 回復 2023-03-29
?
海綿寶寶撒

TA貢獻1809條經驗 獲得超8個贊


time.String()不是測試時間值的可靠方法(除非您也關心單調時鐘值)。來自文檔(添加了重點):

func(時間)字符串

func?(t?Time)?String()?string

String 返回使用格式字符串格式化的時間

"2006-01-02?15:04:05.999999999?-0700?MST"

如果時間具有單調時鐘讀數,則返回的字符串包含最終字段“m=±”,其中值是格式為十進制秒數的單調時鐘讀數。

返回的字符串用于調試;對于穩定的序列化表示,使用帶有顯式格式字符串的 t.MarshalText、t.MarshalBinary 或 t.Format。


對于您的用例,最好使用的輸出time.MarshalText()而不是time.String()

expected,?_?:=?now.MarshalText()
actual,?_?:=?obj.MarshalText()
if?!assert.Equal(string(expected),?string(actual))?...


查看完整回答
反對 回復 2023-03-29
  • 2 回答
  • 0 關注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號