package tree type Node struct { Name string IsDir bool Children map[string]*Node Annotation string Ref string } func splitPath(relPath string) []string { var parts []string start := 0 for i := 0; i <= len(relPath); i++ { if i == len(relPath) || relPath[i] == '/' || relPath[i] == '\\' { if i > start { parts = append(parts, relPath[start:i]) } start = i + 1 } } return parts } func addPath(root *Node, rel string, isDir bool) *Node { parts := splitPath(rel) cur := root for i, part := range parts { if _, ok := cur.Children[part]; !ok { cur.Children[part] = &Node{Name: part, IsDir: i < len(parts)-1, Children: make(map[string]*Node)} } cur = cur.Children[part] } cur.IsDir = isDir return cur }