這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
package mainimport ("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}