如何在 GoLang 中将项目附加到 []os.FileInfo

how to append items to []os.FileInfo in GoLang

我正在制作一个类似于 ioutil.ReadDir() 的函数,但由于我想要文件夹和子文件夹中的所有文件而递归,而 ioutil.ReadDir() 只是在指定的文件夹中执行它,但我不这样做不知道如何将项目附加到我创建的 []os.FileInfo 数组中。

这是我的:

func GetFilesRecursively(searchDirectory string) (foundFileList []os.FileInfo, errorGenerated error){

   fileList := []os.FileInfo{}
   allFilesAndFolders := []string{}

   //Get all the files and directories
   err := filepath.Walk(searchDirectory, func(path string, f os.FileInfo, err error) error {
       allFilesAndFolders = append(allFilesAndFolders, path)
       return nil
   })

   // Remove directories due those are also added into the array and we don't need them
   for _, file := range allFilesAndFolders{

       fileInfo, _ := os.Stat(file)

       if (!fileInfo.Mode().IsDir()){
          fileList = append(fileList, file) //error here!!
       }
   }

   return fileList, err
}

错误在上面代码段的注释中

我该怎么做?

您尝试将字符串追加到 os.FileInfo 的数组中。那是类型错误。

这是你的代码版本,它可以做你想做的事情,看起来更像 Go,变量名更短,未命名 return 类型(它们的类型完美地描述了它们的作用)并使用 var 创建一个空切片。

func GetFilesRecursively(root string) ([]os.FileInfo, error) {
    var files []os.FileInfo

    // walk all directories but only collect files
    err := filepath.Walk(root, func(path string, f os.FileInfo, err error) error {
        if !f.IsDir() {
            files = append(files, f)
        }
        return nil
    })

    return files, err
}