代码之家  ›  专栏  ›  技术社区  ›  rluisr

Go无法将字符串设置为struct

  •  0
  • rluisr  · 技术社区  · 7 年前

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

    我在云端得到两个不同的钥匙 objects 那是在 删除PhotosFroms3 .
    但是 deleteObjects 有2把相同的钥匙。前任 [{Key: 1}, {Key: 1}] .

    为什么? 删除对象 有两个相同的键以及如何设置 物体 在里面 []*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
        }
        ... 
    }
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Anton    7 年前

    迭代值 v 在for循环中,每个迭代都会重用。指示者 &v 对于附加到列表中的每个项目都是相同的。固定代码段:

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