У меня есть структура с полем updated_at, которое я хочу, чтобы он был закодирован в формате JSON как временная метка unix.
Я пробовал следующее, что, похоже, не работает, поле updated_at никогда не удаляется из документа MongoDB:
type Timestamp time.now
func (t Timestamp) MarshalJSON() ([]byte, error) {
ts := time.Time(t).Unix()
fmt.Println(ts)
stamp := fmt.Sprint(ts)
return []byte(stamp), nil
}
type User struct {
UpdatedAt *Timestamp `bson:"updated_at,omitempty" json:"updated_at,omitempty"`
}
Я нашел временное решение, чтобы написать функцию MarshalJSON структуры, сделав что-то вроде этого (изменив тип UpdatedAt на * time.Time):
func (u *User) MarshalJSON() ([]byte, error) {
out := make(map[string]interface{})
if u.UpdatedAt != nil && !u.UpdatedAt.IsZero() {
out["updated_at"] = u.UpdatedAt.Unix()
}
return json.Marshal(out)
}
есть ли для этого лучшее или более элегантное решение?