Unmarshal DynamoDBAttributeValues ​​в структуру с различными атрибутами - PullRequest
0 голосов
/ 04 апреля 2020

Я прочитал некоторые данные из DynamodB. Вот что я получаю

{
  Item: {
    rating: {
      N: "6"
    },
    pk: {
      S: "artist-1"
    },
    gender: {
      S: "woman"
    },
    sk: {
      S: "Alexandra A"
    }
  }
}

Теперь у меня есть структура, которая выглядит следующим образом:

type Artist struct {
    ArtistID string  `json:"id"`
    Gender   string  `json:"gender"`
    Name     string  `json:"name"`
    Rating   float64 `json:"rating"`
}

Теперь я делаю

artist := model.Artist{}
err = dynamodbattribute.UnmarshalMap(result.Item, &artist)

Теперь я могу получить доступ, например: пол с artist.gender. Так что это нормально, но я не могу сделать это для ArtistId, потому что он называется pk в моей динамической базе данных, и я использую 'id' для моей структуры. Как правильно решить эту проблему? Я не хочу заменять мой «id» на «pk» в структуре.

1 Ответ

0 голосов
/ 04 апреля 2020

UnmarshalMap() не поддерживает ни одного данного тега Unmarshal. Если вы не хотите менять 'id' на 'pk' в структуре, тогда вам нужно установить значение pk в id ключе до UnmarshalMap в карте вручную.

func UnmarshalMap(m map[string]*dynamodb.AttributeValue, out interface{}) error {
    m["id"] = m["pk"]
    dynamodbattribute.UnmarshalMap(m, out)
}

Для этой особой настройки лучше создать собственную обобщенную c функцию Unmarshal, а затем вызвать UnmarshalMap() изнутри.

artist := model.Artist{}
err = UnmarshalMap(result.Item, &artist)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...