go - 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
}
我该如何解决这个问题?
解决方案
在第一个代码示例中,您以ListTree
递归方式调用但不使用其返回值,因此在级别 > 0 的调用计算和返回的任何内容都被丢弃在地板上。
相反,请尝试:
result += ListTree(path + "/" + entry.Name(),level+1)
或者,使用filepath.Walk遍历目录树。
推荐阅读
- javascript - javascript将下拉值设置为月份在IE11中不起作用
- salesforce - 根据行值隐藏 Lightning Datatable 内的按钮
- php - 如何按字母顺序按升序和降序对数组进行排序?
- javascript - Strapi 未从 Digital Ocean 上托管的现有 MongoDB 加载集合
- ios - 实时更新自定义表格部分标题视图内容
- c++ - c++ 错误分配应用程序失败
- angular - 到嵌套模块的角度路由
- php - 在每个请求上更新“last_active”
- r - which.max 不起作用,但 which.min 是(在 R 中)
- jquery - wbraganca/yii2-dynamicform 值在编辑时复制到克隆字段,但不是在创建时