Golang 与 zTree

本贴最后更新于 2160 天前,其中的信息可能已经天翻地覆
package main

import (
	"encoding/json"
	"fmt"
	"os"
	"path/filepath"
	"sort"
)

func main() {
	rootpath := "D:\\projects"

	root := FileNode{"projects", rootpath, []*FileNode{}}
	fileInfo, _ := os.Lstat(rootpath)

	walk(rootpath, fileInfo, &root)

	data, _ := json.Marshal(root)

	fmt.Printf("%s", data)
}

type FileNode struct {
	Name      string      `json:"name"`
	Path      string      `json:"path"`
	FileNodes []*FileNode `json:"children"`
}

func walk(path string, info os.FileInfo, node *FileNode) {
	// 列出当前目录下的所有目录、文件
	files := listFiles(path)

	// 遍历这些文件
	for _, filename := range files {
		// 拼接全路径
		fpath := filepath.Join(path, filename)

		// 构造文件结构
		fio, _ := os.Lstat(fpath)

		// 将当前文件作为子节点添加到目录下
		child := FileNode{filename, fpath, []*FileNode{}}
		node.FileNodes = append(node.FileNodes, &child)

		// 如果遍历的当前文件是个目录,则进入该目录进行递归
		if fio.IsDir() {
			walk(fpath, fio, &child)
		}
	}

	return
}

func listFiles(dirname string) []string {
	f, _ := os.Open(dirname)

	names, _ := f.Readdirnames(-1)
	f.Close()

	sort.Strings(names)

	return names
}
  • JSON

    JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。

    43 引用 • 179 回帖
  • zTree
    1 引用 • 4 回帖
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    413 引用 • 1319 回帖 • 683 关注

赞助商 我要投放

3 回帖
请输入回帖内容 ...
  • 88250

    真巧啊,最近 zTree 的作者对 Vditor 项目做了很多贡献

  • 其他回帖
  • An

    才发现原来 D 大至少领先了我 6 年 😂

    1 回复
  • someone

    可以实现构造无限嵌套 JSON,厉害啊。这样可以实现无限级 tree 了。