gpt4 book ai didi

go - 为什么 time.Time 在 bson.Marshal 和 bson.Unmarshal 之后不相等?

转载 作者:数据小太阳 更新时间:2023-10-29 03:31:33 30 4
gpt4 key购买 nike

为什么会输出false?我期待 true...

package main
import (
"fmt"
"time"
"gopkg.in/mgo.v2/bson"
)

type S struct {
T time.Time
}
func main() {
t := S{time.Now()}
bytes, _ := bson.Marshal(t)
var dt S
bson.Unmarshal(bytes, &dt)
fmt.Println(dt.T.Equal(t.T))
}

go run 上面会输出false,为什么Marshal/Unmarshal不保留原来的值?

最佳答案

Bson 存储时间的精度低于 time.Time,从 Bson 返回的值可能不等于您存储的值。您需要使用 bson.Now() :

package main

import (
"fmt"
"gopkg.in/mgo.v2/bson"
"time"
)

type S struct {
T time.Time
}

func main() {
t := S{bson.Now()}
bytes, _ := bson.Marshal(t)
var dt S
bson.Unmarshal(bytes, &dt)
fmt.Println(dt.T)
fmt.Println(t.T)
fmt.Println(dt.T.Equal(t.T))
}

输出:

$> go run main.go 
2018-09-08 10:48:42.45 +0300 MSK
2018-09-08 10:48:42.45 +0300 MSK
true

关于go - 为什么 time.Time 在 bson.Marshal 和 bson.Unmarshal 之后不相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52232505/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com