Как я могу сохранить массив в таблице DynamoDB - PullRequest
1 голос
/ 07 марта 2020

У меня есть следующая структура:

type User struct {
  ID       string    `json:"id"`
  Name     string    `json:"name"`
  LastName string    `json:"lastName"`
  User     string    `json:"user"`
  Password string    `json:"password"`
  Vehicles []Vehicle `json:"vehicles"`
}
type Vehicle struct {
  Plate string `json:"plate"`
}

Я хочу сохранить массив Транспортных средств в моей DynamoDB. Я провел некоторое исследование и обнаружил, что должен использовать следующий код:

input := &dynamodb.PutItemInput{
    TableName: aws.String(tableUsers),
    Item: map[string]*dynamodb.AttributeValue{
        "id": {
            S: aws.String(fmt.Sprintf("%v", uuid)),
        },
        "name": {
            S: aws.String(user.Name),
        },
        "lastName": {
            S: aws.String(user.LastName),
        },
        "user": {
            S: aws.String(user.User),
        },
        "password": {
            S: aws.String(user.Password),
        },
        "vehicles": {
            L: [{
                M: {
                    "plate": {S: aws.String("test")},
                },
            }],
        },
    },
}

Но у меня по-прежнему возникает синтаксическая ошибка в:

L: [{
    M: {
        "plate": {S: aws.String("test")},
    },
}],

Что я делаю неправильно?

1 Ответ

4 голосов
/ 07 марта 2020

Если вы посмотрите на Годо Динамодба c: https://docs.aws.amazon.com/sdk-for-go/api/service/dynamodb/#AttributeValue

Вы можете видеть, что поле L имеет следующий тип: [] * AttributeValue

При создании литерального среза необходимо указать его тип. Так что для вашего случая это:

L: []*dynamodb.AttributeValue{
  {
    M: map[string]*dynamodb.AttributeValue{
      "plate": {S: aws.String("test")}
    }
  }
}

Если вы хотите лучше понять структуру, срезы и карту, вы можете прочитать следующие статьи:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...