I tempi in BSON sono rappresentati come millisecondi UTC dall'epoca Unix (spec ). I valori temporali in Go hanno una precisione di nanosecondi.
Per eseguire il round trip time.Time valori tramite il marshalling BSON, utilizzare tempi troncati a millisecondi dall'epoca Unix:
func truncate(t time.Time) time.Time {
return time.Unix(0, t.UnixNano()/1e6*1e6)
}
...
u := user{
Username: "test_bson_username",
Password: "1234",
UserAccessibility: "normal",
RegisterationTime: truncate(time.Now()),
}
Puoi anche utilizzare Time.Truncate metodo:
u := user{
Username: "test_bson_username",
Password: "1234",
UserAccessibility: "normal",
RegisterationTime: time.Now().Truncate(time.Millisecond),
}
Questo approccio si basa sul fatto che l'epoca di Unix e il tempo di Go zero differiscono di un numero intero di millisecondi.