我如何在json中响应时间毫秒零

In my mongodb, I have field

"createdAt" : ISODate("2018-10-02T01:17:58.000Z")

and I have struct have field

CreatedAt      time.Time       `json:"createdAt" bson:"createdAt"`

But when I response by json, it's missing zero milisecond I expected

"createdAt": "2018-10-02T01:17:58.000Z"

But received

"createdAt": "2018-10-02T01:17:58Z"

From golang.org/pkg/time/#Time.MarshalJSON:

The time is a quoted string in RFC 3339 format, with sub-second precision added if present.

The zeros are insignificant, so they are omitted. If that doesn't work for you, implement your own MarshalJSON method:

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

If you have to do this in many places, it may be worthwhile to create your own time type (that will be inconvenient if you have to do date math, though):

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"))
}