给目标类型创建一个别名,并对该别名重载MarshalJSON方法,例如:

			//给time.Time创建别名为jsonTime
			type jsonTime time.Time
			
			//包含time.Time类型字段的结构体,改用jsonTime这个类型
			type Message struct {
				CreateAt    jsonTime `json:"createAt"`
			}
			
			//重写jsonTime类型的MarchalJSON方法,以改变rfc3339的时间格式
			func (this jsonTime) MarshalJSON() ([]byte, error) {
				var stamp = fmt.Sprintf("\"%s\"", time.Time(this).Format("2006-01-02 15:04:05"))
				return []byte(stamp), nil
			}

如此直接对Message对象进行序列化,其中CreateAt字段的格式就会变成自定义格式。

			var msg = Message{
				CreateAt: jsonTime(time.Now()),
			}
			marshal, _ := json.Marshal(msg)
			fmt.Println(string(marshal))
			//输出结果:
			{"createAt":"2021-02-02 21:29:36"}