В моем mongodb у меня есть поле
"createdAt" : ISODate("2018-10-02T01:17:58.000Z")
и у меня есть поле структуры
CreatedAt time.Time `json:"createdAt" bson:"createdAt"`
Но когда я отвечаю с помощью json, отсутствует ноль миллисекунды Я ожидал
"createdAt": "2018-10-02T01:17:58.000Z"
Но получил
"createdAt": "2018-10-02T01:17:58Z"
Я использую mgo, например: `` userCol.FindId (userID) .One (& result) ''
Я думаю, это зависит от того, как пойдет время lang marshal json.
Можете ли вы создать Минимальный, полный и проверяемый пример, который демонстрирует проблему, и редактировать вопрос, чтобы включить ее?

Из golang.org/pkg/time/#Time.MarshalJSON:
The time is a quoted string in RFC 3339 format, with sub-second precision added if present.
Нули не имеют значения, поэтому их опускаем. Если это не сработает для вас, реализуйте свой собственный метод MarshalJSON:
package main
import (
"encoding/json"
"fmt"
"time"
)
type MyType struct {
Foo string
CreatedAt time.Time `json:"-" bson:"createdAt"`
}
func (t MyType) MarshalJSON() ([]byte, error) {
type MyType_ MyType // prevent recursion
return json.Marshal(struct {
MyType_
CreatedAt string `json:"createdAt"` // Override time field
}{
MyType_(t),
t.CreatedAt.Format("2006-01-02T15:04:05.000Z07:00"),
})
}
func main() {
t := MyType{
Foo: "bar",
CreatedAt: time.Date(2018, 10, 2, 12, 13, 14, 0, time.UTC),
}
b, err := json.MarshalIndent(t, "", " ")
fmt.Println(err, string(b))
t.CreatedAt = t.CreatedAt.Add(123456 * time.Microsecond)
b, err = json.MarshalIndent(t, "", " ")
fmt.Println(err, string(b))
}
// Output:
// <nil> {
// "Foo": "bar",
// "T": "2018-10-02T12:13:14.000Z"
// }
// <nil> {
// "Foo": "bar",
// "T": "2018-10-02T12:13:14.123Z"
// }
https://play.golang.org/p/bmDk1pejGPS
Если вам приходится делать это во многих местах, возможно, стоит создать свой собственный тип времени (хотя это будет неудобно, если вам придется выполнять математику даты):
type MyType struct {
Foo string
CreatedAt MyTime `json:"createdAt" bson:"createdAt"`
}
type MyTime struct {
time.Time
}
func (t MyTime) MarshalJSON() ([]byte, error) {
return json.Marshal(t.Format("2006-01-02T15:04:05.000Z07:00"))
}
Спасибо, этот ответ такой ясный. Ты только что спас мне жизнь =))
Не могли бы вы показать код, который вы используете для создания и получения этих значений?