GoLang 打印目录树

我在 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 string

func 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

}

我该如何解决这个问题?


当年话下
浏览 130回答 2
2回答

皈依舞

在第一个代码示例中,您以ListTree递归方式调用但不使用其返回值,因此在级别 > 0 的调用计算和返回的任何内容都被丢弃在地板上。相反,请尝试:result += ListTree(path + "/" + entry.Name(),level+1)或者,使用filepath.Walk遍历目录树。

不负相思意

您可以使用 filepath.Walk。filepath.Walk("/path/to/folder", func(name string, info os.FileInfo, err error) error {    fmt.Println(name)    return nil})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go