【问题标题】:Go can't set string to structGo 无法将字符串设置为结构
【发布时间】:2018-02-03 21:57:18
【问题描述】:

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

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

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

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
    }
    ... 
}

【问题讨论】:

    标签: go aws-sdk-go


    【解决方案1】:

    for 循环中的迭代值v 将在每次迭代中重复使用。指针&v 对于附加到列表的每个项目都是相同的。固定sn-p:

    for _, v := range *objects {
            vcopy := v
            deleteObjects = append(deleteObjects, &s3.ObjectIdentifier{Key: &vcopy})
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-19
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      • 2020-05-23
      • 2020-10-24
      • 1970-01-01
      • 2014-02-04
      相关资源
      最近更新 更多