相当新的。 我试图基本上读取目录和子目录中的所有文件,填充切片然后进一步处理。 以下是代码(要查看的主要功能是 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
}
答案 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个项目将为空。