返回空切片
Empty slice returned
相当新。
我试图基本上读取目录和子目录中的所有文件,填充到一个切片中,然后进一步处理。
这是代码(要查看的主要功能是 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,这是初始值。
仅供参考,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
}
您需要将结果附加到它:
allFiles = append(allFiles, expandDirectory(filepath, allFiles)...)
还有
allFiles := expandDirectory(dirname, make([]os.FileInfo, 5))
应该是:
allFiles := expandDirectory(dirname, make([]os.FileInfo, 0, 5))
否则,您将追加到 allFiles,前 5 项将为空。
相当新。 我试图基本上读取目录和子目录中的所有文件,填充到一个切片中,然后进一步处理。 这是代码(要查看的主要功能是 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,这是初始值。
仅供参考,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
}
您需要将结果附加到它:
allFiles = append(allFiles, expandDirectory(filepath, allFiles)...)
还有
allFiles := expandDirectory(dirname, make([]os.FileInfo, 5))
应该是:
allFiles := expandDirectory(dirname, make([]os.FileInfo, 0, 5))
否则,您将追加到 allFiles,前 5 项将为空。