разрабатывал ее как задание от технопарка к курсу сетевого программирования на go
выводит дерево содержимого выбранного каталога. Вывод происходит в отсортированном по имени виде.
ключ -f
выводит папки и файлы + их размер
без ключа -f
выводит только папки
Для запуска нужно иметь компилятор для golang.
В консоли пишем:
go run путь_к_программе/main.go путь_к_каталогу_для_сканирования
или
go run путь_к_программе/main.go путь_к_каталогу_для_сканирования -f
можно запустить и в другой среде, например в goland
Скрины: (в репозиторий добавил папку testdata для теста, скрины для нее)
без ключа -f (только дерево папок):
с ключем -f (дерево папок и файлов + их размеры)
Детали реализации:
sliceForGraffiti - слайс, который требуется для корректного, красивого вывода графики. По лежащим в нем булевым значениям функция printGraffiti определяет, где выводить "│ ", а где просто " ", где выводить "├───", а где выводить "└───" . В слайсе хранится true, если текущий рассматриваемый файл или папка является последним в текущей директории т.е. является последним элементом слайса dirs или files. Логика этого механизма тяжело продумана и не рекомендуется для внесения изменений.
Есть возможность перенаправить поток вывода (например записать результат в текстовый файл)
Для этого в коде программы
func main() { out := os.Stdout
в переменную out нужно присвоить что хотите.
P.S. Если бы не заморачиваться с красивым выводом, программу можно упаковать в 30-40 строк