0

我有一个包含两个值(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)
    }

任何帮助这样做的权利将不胜感激。

4

1 回答 1

1

您正在分配循环中的keyval变量的地址,每个变量只有一个。您需要复制这些值,以便为每个条目分配一个新指针。最简单的方法是使用提供的 aws 便利功能:

for key, val := range upload_out {
    name := &s3.CompletedPart{
        ETag:       aws.String(val),
        PartNumber: aws.Int64(key),
    }
    paths = append(paths, name)
}
于 2017-01-26T20:37:32.403 回答