package main import ( "fmt" "io" "log" "os" ) func main() { dirTree(os.Stdout, "..", true) } func dirTree(output io.Writer, currDir string, printFile bool) error { recursionDirTree(currDir, false) return nil } // todo Разобраться с log, err.Error func recursionDirTree(currDir string, printFiles bool) { fileObj, err := os.Open(currDir) defer fileObj.Close() if err != nil { log.Fatalf("Could not open %s: %s", currDir, err.Error()) } files, err := os.ReadDir(fileObj.Name()) if err != nil { log.Fatalf("Could not read dir names in %s: %s", currDir, err.Error()) } // os.ReadDir возвращает отсортированный слайс DirEntry var sortedFilesNameArr []string = []string{} var filesMap map[string]os.DirEntry = map[string]os.DirEntry{} for _, file := range files { sortedFilesNameArr = append(sortedFilesNameArr, file.Name()) filesMap[file.Name()] = file } fmt.Println(files) // Превращаем слайс всех объектов (файлов и папок) в слайс только папок // если printFiles == false var dirList []os.DirEntry = []os.DirEntry{} if !printFiles { for _, file := range files { if file.IsDir() { dirList = append(dirList, file) } } files = dirList } var length int = len(files) fmt.Println(length) // for i, file := range files{} // fmt.Println(files) // fmt.Println(unSortedFilesNameArr) // fmt.Println(sortedFilesArr) // fmt.Printf("%T\n", files[0]) // fmt.Println(files) }