我在 Go 中创建递归函数以打印包含所有子目录和文件的目录时遇到问题。我在将当前文件或目录保存到结果时遇到了一些问题。以下代码仅打印 0 级目录。func ListTree(path string, level int) (result string, err error) { files, err := ioutil.ReadDir(path) if err != nil { return result, err } for idx, entry := range files { result += fmt.Sprintf("\n%v/%v", MultiplyElement("\t", level), entry.Name()) if entry.IsDir() { ListTree(path + "/" + entry.Name(),level+1) } } return result, err}但是,当我在函数外部声明结果变量时(我知道那是糟糕的代码,仅用于测试),它工作得很好,但是调用函数后结果值没有被清除。var result stringfunc ListTree(path string, level int) (string, error) { files, err := ioutil.ReadDir(path) if err != nil { return result, err } for idx, entry := range files { result += fmt.Sprintf("\n%v/%v", MultiplyElement("\t", level), entry.Name()) if entry.IsDir() { ListTree(path + "/" + entry.Name(),level+1) } } return result, err}我该如何解决这个问题?
2 回答
皈依舞
TA贡献1851条经验 获得超3个赞
在第一个代码示例中,您以ListTree
递归方式调用但不使用其返回值,因此在级别 > 0 的调用计算和返回的任何内容都被丢弃在地板上。
相反,请尝试:
result += ListTree(path + "/" + entry.Name(),level+1)
或者,使用filepath.Walk遍历目录树。
不负相思意
TA贡献1777条经验 获得超10个赞
您可以使用 filepath.Walk。
filepath.Walk("/path/to/folder", func(name string, info os.FileInfo, err error) error {
fmt.Println(name)
return nil
})
- 2 回答
- 0 关注
- 129 浏览
添加回答
举报
0/150
提交
取消