0

此代码是从 s3 获取所有对象并删除对象。
getAllObjects从 调用DeletePhotosFromS3

我云得到了 2 个不同的objects密钥DeletePhotosFromS3
但是deleteObjects有2个相同的键。前[{Key: 1}, {Key: 1}]

为什么有 2 个相同的deleteObjects键以及如何设置?objects[]*s3.ObjectIdentifier

func getAllObject(userID string) (*[]string, error) {
    var objects []string

    svc := initS3()
    config := model.NewConfig()

    input := &s3.ListObjectsInput{
        Bucket:  aws.String(config.AWSS3Bucket),
        Prefix:  aws.String(userID),
        MaxKeys: aws.Int64(2), // default 1000
    }

    result, err := svc.ListObjects(input)
    if err != nil {
        return &objects, err
    }

    for _, v := range result.Contents {
        objects = append(objects, *v.Key)
    }

    return &objects, nil
}

func DeletePhotosFromS3(userID string) (error) {
    var deleteObjects []*s3.ObjectIdentifier

    svc := initS3()
    config := model.NewConfig()

    objects, err := getAllObject(userID) // called getAllObject
    for _, v := range *objects {
        deleteObjects = append(deleteObjects, &s3.ObjectIdentifier{Key: &v}) // Er
    }
    ... 
}
4

1 回答 1

2

vfor 循环中的迭代值会在每次迭代中重复使用。&v对于附加到列表的每个项目,指针都是相同的。固定片段:

for _, v := range *objects {
        vcopy := v
        deleteObjects = append(deleteObjects, &s3.ObjectIdentifier{Key: &vcopy})
}
于 2018-02-03T13:57:18.183 回答