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

问题描述 投票:-1回答:1

为什么输出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不保留原值?

go
1个回答
3
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.