Как правильно распаковать карту в пользовательскую вложенную структуру в golang (aws sdk-for-go)

122
16

У меня есть карта, которая содержит два значения (Etag & PartNumber) следующим образом:

upload_out := make(map[int64]string) //key - PartNumber, value - Etag

В конце концов, я хочу пропустить эту карту с моими значениями и выгрузить их в кусок пользовательской структуры следующим образом:

Parts: []*s3.CompletedPart{
{ // Required
ETag: aws.String("ETag1"),
PartNumber: aws.Int64(PartNumber1),
},
{ // Required
ETag: aws.String("ETag2"),
PartNumber: aws.Int64(PartNumber2),
},
// More values...
},

Думаю, моя проблема не в том, как правильно это сделать. В моей петле покупок все время добавляется одна пара ключей, значение. Поэтому не все значения распаковываются.

var paths  []*s3.CompletedPart
for key, val := range upload_out {
//var unique [10000]*s3.CompletedPart //Attempt unique variable names

name := &s3.CompletedPart{ // this only does one
ETag: &val,
PartNumber: &key,
}

paths = append(paths, name)
}

Любая помощь в этом праве будет оценена по достоинству.

спросил(а) 2021-01-19T15:44:04+03:00 9 месяцев назад
1
Решение
65

Вы назначаете адрес key и переменных val в своем цикле, который есть только один из них. Вам нужно скопировать эти значения, чтобы вы могли назначить новый указатель для каждой записи. Самый простой способ - использовать предоставленные функции удобства aws:

for key, val := range upload_out {
name := &s3.CompletedPart{
ETag: aws.String(val),
PartNumber: aws.Int64(key),
}
paths = append(paths, name)
}

ответил(а) 2021-01-19T15:44:04+03:00 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема