go 递归读取目录,并生成树形结构的数据
// 读取目录中的所有文件,如果是目录则递归读取,生成结构化的树形 struct package main import ( "encoding/json" "fmt" "os" "path/filepath" ) // TreeNode 文件的树形结构体 type TreeNode struct { Name string Path string IsDir bool Children []*TreeNode } // RecursionReadDir 递归读取目录 func RecursionReadDir(path string) (*TreeNode, error) { info, err := os.Stat(path) if err != nil { return nil, err } tree := &TreeNode{ Name: info.Name(), Path: path, IsDir: info.IsDir(), } if tree.IsDir { files, err := filepath.Glob(filepath.Join(path, "*")) if err != nil { return nil, err } for _, f := range files { child, err := RecursionReadDir(f) if err != nil { return nil, err } tree.Children = append(tree.Children, child) } } return tree, nil } // PrintTree 递归打印目录树 func PrintTree(tree TreeNode, index string) { fmt.Println(tree.Path, index) if tree.IsDir { index = index + "-" for _, child := range tree.Children { PrintTree(*child, index) } } } func main() { fileTree, _ := RecursionReadDir("F:\\MyGo\\study") //递归打印 PrintTree(*fileTree, "-") //通过json字符串输出 json, _ := json.Marshal(fileTree) fmt.Println(string(json)) }