概述
操作系统会处理两种不同的时钟类型:墙上时钟(wall)和单调时钟(monotonic)。
在本文中,我们将会看到当time.Time和JSON一起使用时可能产生的影响,并了解为什么这种时钟差异对于理解至关重要。
案例
在下面的例子中,我们将继续使用Event结构体,但是只包含一个time.Time字段(非嵌入字段):
type Event struct {
Time time.Time
}
我们将实例化一个Event,并将它marshal成JSON,并将JSON串unmarshal成另外一个结构体。然后,我们将比较这个两个结构体。让我们看看marshaling/unmarshaling过程是否总是可逆的:
t := time.Now() ①
event1 := Event{ ②
Time: t,
}
b, err := json.Marshal(event1) ③
if err != nil {
return err
}
var event2 Event
err = json.Unmarshal(b, &event2) ④
if err != nil {
return err
}
isEquals := event1 == event2
① 获取当前本地时间
② 实例化一个Event结构体
③ Marshal成JSON
④ Unmarshaling JSON成结构体实例
那么isEquals应该是什么值?它会是false,而非true。我们该如何解