У меня есть такая структура
type log struct {
[...]
Timestamp timestamp `json:"timestamp"`
}
, и я хочу иметь метку времени в качестве метки времени Unix вместо того, что по умолчанию делает go (2018-09-21T19:31:03.291Z
)
Я пробовалсоздание собственного типа для этого, как это:
type timestamp struct {
time.Time
}
func (t timestamp) MarshalJSON() ([]byte, error) {
return []byte(strconv.FormatInt(time.Time(t.Time).Unix(), 10)), nil
}
func (t *timestamp) UnmarshalJSON(data []byte) error {
i, err := strconv.ParseInt(string(data[:]), 10, 64)
if err != nil {
return err
}
t = ×tamp{
time.Unix(i, 0),
}
return nil
}
, но я всегда получаю ошибку can not unmarshal timestamp into *main.timestamp
при попытке чтения из базы данных.
for iter.Scan(&message.Text, &message.Timestamp) {
userlogResult.Messages = append(userlogResult.Messages, message)
}
if err := iter.Close(); err != nil {
log.Error(err)
}
Здесь нельзя отменять марку времени.https://github.com/gocql/gocql/blob/799fb0373110eaa4e2e71dd32a9b5903f80dca8f/helpers.go#L30 проблема в том, что он не использует функции Unmarshall.
Редактировать: я ответил на свой вопрос.