当您需要实现自定义marshal和unmarshal函数时,就是这种情况。

UnmarshalJSON(b []byte) error { ... }
MarshalJSON() ([]byte, error) { ... }
通过遵循json package的Golang文档中的示例,您可以获得如下内容:
// first create a type alias
type JsonBirthDate time.Time
// Add that to your struct
type Person struct {
    Name string `json:"name"`
    BirthDate JsonBirthDate `json:"birth_date"`
}
// imeplement Marshaler und Unmarshalere interface
func (j *JsonBirthDate) UnmarshalJSON(b []byte) error {
    s := strings.Trim(string(b), "\"")
    t, err := time.Parse("2006-01-02", s)
    if err != nil {
        return err
    }
    *j = JB(t)
    return nil
}
func (j JsonBirthDate) MarshalJSON() ([]byte, error) {
    return json.Marshal(j)
}
// Maybe a Format function for printing your date
func (j JsonBirthDate) Format(s string) string {
    t := time.Time(j)
    return t.Format(s)
}