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

Arrays 如何将项目附加到GoLang中的[]os.FileInfo,arrays,go,fileinfo,Arrays,Go,Fileinfo,我正在创建一个类似ioutil.ReadDir()的函数,但由于递归原因,我希望文件夹和子文件夹中的所有文件,而ioutil.ReadDir()只在指定的文件夹中执行,但我不知道如何将项附加到我创建的[]os.FileInfo数组中 这就是我所拥有的: func GetFilesRecursively(searchDirectory string) (foundFileList []os.FileInfo, errorGenerated error){ fileList := []os.

我正在创建一个类似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数组中。这是一个类型错误

下面是代码的一个版本,它可以实现您想要的功能,看起来更像,具有较短的变量名、未命名的返回类型(它们的类型完全描述了它们的功能)以及使用
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
}

错误是什么?Adrian,这是一个错误:“不能在append中使用文件(类型字符串)作为os.FileInfo类型”,这似乎很清楚。您正在尝试将
文件
(文件路径,如错误所示,为
字符串
)附加到
[]os.FileInfo
,该文件只接受
os.FileInfo
类型的元素。您可能想将
fileInfo
变量附加到切片,而不是
file
variable.fileList=append(fileList,fileInfo)您是对的@Uvelichitel!我试过了,它成功了。