为了账号安全,请及时绑定邮箱和手机立即绑定

GoLang 打印目录树

GoLang 打印目录树

Go
当年话下 2022-06-01 16:54:07
我在 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遍历目录树。


查看完整回答
反对 回复 2022-06-01
?
不负相思意

TA贡献1777条经验 获得超10个赞

您可以使用 filepath.Walk。


filepath.Walk("/path/to/folder", func(name string, info os.FileInfo, err error) error {

    fmt.Println(name)

    return nil

})


查看完整回答
反对 回复 2022-06-01
  • 2 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信