迭代 ListObject 时的文件名相同

Same file name on iterating ListObject

我想读取 minio 存储桶中的文件列表。按照文档,我执行以下步骤:

var listFile []*string
minioClient, err := minio.New(location, user, password, true)
// Create a done channel.
doneCh := make(chan struct{})
defer close(doneCh)
// Recursively list all objects in 'mytestbucket'
recursive := true
bucket := "private"
url := "production/font/"
objectCh := minioClient.ListObjects(bucket, url, recursive, doneCh)
for message := range objectCh {
    listFile = append(listFile, &message.Key)
}
return listFile, err

当我读取文件列表时,我将获得一个包含 24 个项目但具有相同文件名的数组,例如:

"production/font/merriweathersans-regular-webfont.ttf",
"production/font/merriweathersans-regular-webfont.ttf",
"production/font/merriweathersans-regular-webfont.ttf",
"production/font/merriweathersans-regular-webfont.ttf",
"production/font/merriweathersans-regular-webfont.ttf",
...

但我应该看到该目录的所有文件名:

"production/font/Nexa-Light.ttf",
"production/font/Nexa-Bold.ttf",
"production/font/merriweathersans-regular-webfont.ttf",
....

我哪里错了?

问题是循环中的错字,即将 &message.Key 附加到 listFile。这里 message 变量总是相同的,并且您要追加相同的变量,因此 listFile 总是指向 message.key.

的最后一个值

要解决此问题,您可以:

for message := range objectCh {
    tmpMessage := message
    listFile = append(listFile, &tmpMessage.Key)
}