返回空切片

时间:2015-07-16 00:13:30

标签: arrays go slice

相当新的。 我试图基本上读取目录和子目录中的所有文件,填充切片然后进一步处理。 以下是代码(要查看的主要功能是 Main和expandDirectory

package main

import (
    "fmt"
    "io/ioutil"
    "os"
)

const dirname string = "MyDirectory"

func check(e error) {
    if e != nil {
        panic(e)
    }

}

func expandDirectory(currentDirectory string, allFiles []os.FileInfo) []os.FileInfo {
    files, e := ioutil.ReadDir(currentDirectory)
    check(e)
    for _, internalDir := range files {
        switch mode := internalDir.Mode(); {
        case mode.IsDir():
            var filepath = currentDirectory + internalDir.Name() + "\\"
            expandDirectory(filepath, allFiles)
        case mode.IsRegular():
            allFiles = append(allFiles, internalDir)
        }
    }
    return allFiles
}

func main() {
    allFiles := expandDirectory(dirname, make([]os.FileInfo, 5))
    fmt.Printf("%v", cap(allFiles))
}

最终打印将打印5,这是初始值。

只是FYI,expandDirectory函数只是目录的递归函数,如果是文件则添加文件引用。

感谢您的帮助

我哪里出错

最终代码(仅限更改)

func main() {
  allFiles := expandDirectory(dirname)
}


func expandDirectory(currentDirectory string) []os.FileInfo {
    allFiles := make([]os.FileInfo, 0, 5)
    ....
        case mode.IsDir():
    ....
            allFiles = append(allFiles, expandDirectory(filepath)...)
    ....
    return allFiles
}

1 个答案:

答案 0 :(得分:0)

您需要将结果附加到它:

allFiles = append(allFiles, expandDirectory(filepath, allFiles)...)

另外

 allFiles := expandDirectory(dirname, make([]os.FileInfo, 5))

应该是:

 allFiles := expandDirectory(dirname, make([]os.FileInfo, 0, 5))

否则您将附加到allFiles,前5个项目将为空。

相关问题