// randomize order of each listing batch func List(ss3 s3.Interface, output *StepLocation, ch chan s3.ListedObject) { var marker string for { r, err := ss3.List(s3.ListRequest{MaxKeys: 1000, Bucket: output.Bucket, Prefix: output.Prefix, Marker: marker}) if err != nil { panic(err) } p := rand.Perm(len(r.Contents)) for i := 0; i < len(r.Contents); i++ { v := r.Contents[p[i]] ch <- s3.ListedObject{ ListBucketResultContents: v, Bucket: output.Bucket, } } if r.IsTruncated { marker = r.Contents[len(r.Contents)-1].Key } else { break } } close(ch) }