为什么输出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