dongxixia6399 2018-02-03 12:56
浏览 12
已采纳

Go无法将字符串设置为struct

This code is get all objects from s3 and delete objects.
getAllObjects is called from DeletePhotosFromS3.

I cloud get 2 different keys in objects that is in DeletePhotosFromS3.
But deleteObjects have 2 same keys. ex [{Key: 1}, {Key: 1}].

Why deleteObjects have 2 same keys and how to set objects in []*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条回答 默认 最新

  • douba4275 2018-02-03 13:57
    关注

    The iteration value v in your for loop is reused for each iteration. The Pointer &v will be the same for each item appended to the list. Fixed snippet:

    for _, v := range *objects {
            vcopy := v
            deleteObjects = append(deleteObjects, &s3.ObjectIdentifier{Key: &vcopy})
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?