【发布时间】:2021-05-13 18:41:52
【问题描述】:
我已发送go playground 来重现我的问题。我有一些测试失败,因为 json Marshal 方法在 time.Time 对象的转换过程中似乎失去了精度。
运行以下代码:
package main
import (
"fmt"
"encoding/json"
"time"
)
type myStruct struct{
Now time.Time `json:"time"`
}
func main() {
expect := &myStruct{Now: time.Now()}
fmt.Println(expect.Now.String())
byteData, err := json.Marshal(expect)
if err != nil {
panic(err.Error())
}
actual := &myStruct{}
err = json.Unmarshal(byteData, &actual)
if err != nil {
panic(err.Error())
}
fmt.Println(actual.Now.String())
}
输出:
2009-11-10 23:00:00 +0000 UTC m=+0.000000001
2009-11-10 23:00:00 +0000 UTC
问题在于,当我运行任何涉及转换 time.Time 对象的测试时,我无法使用任何标准方法来比较结果(作证、反映...)。
有没有办法在编组time.Time 对象时保持精度,或者将时间值“四舍五入”到较低的精度?
【问题讨论】:
-
这不是“精度”的损失。它省略了时间对象的单调部分。
标签: json go time marshalling