Skip to content

IvanIlin22/utility_tree

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 

Repository files navigation

utility_tree

Утилита tree.

Выводит дерево каталогов и файлов (если указана опция -f). Необходимо реализовать функцию dirTree внутри main.go. Начать можно с https://golang.org/pkg/os/#Open и дальше смотреть какие методы есть у результата.

Код писать в файле main.go

Запускать тесты через go test -v находясь в папке c заданием. После запуска вы должны увидеть такой результат:

$ go test -v
=== RUN   TestTreeFull
--- PASS: TestTreeFull (0.00s)
=== RUN   TestTreeDir
--- PASS: TestTreeDir (0.00s)
PASS
ok      coursera/homework/tree     0.127s

go run main.go . -f

├───main.go (1881b)
├───main_test.go (1318b)
└───testdata
	├───project
	│	├───file.txt (19b)
	│	└───gopher.png (70372b)
	├───static
	│	├───css
	│	│	└───body.css (28b)
	│	├───html
	│	│	└───index.html (57b)
	│	└───js
	│		└───site.js (10b)
	├───zlin
	│	└───empty.txt (empty)
	└───zzfile.txt (empty)

go run main.go .

└───testdata
	├───project
	├───static
	│	├───css
	│	├───html
	│	└───js
	└───zline

Замечания: Перенос строки - unix-style ( \n )

Отступы - символ графики + символ табуляции ( \t )

Для расчета символа графики в отступах подумайте про последний элемент и префикс предыдущих уровней. Там довольно простое условие. Хорошо помогает проговорить вслух то что вы видите на экране.

Если вы пользуетесь windows - помните, что там и в linux разделители директорий различаются - используйте лучше string(os.PathSeparator)

Рекурсивный алгоритм проще всего. Но можно реализовать и не-рекурсивно

Вы можете реализовать любые нужные вам функции, вы не ограничены в единственной dirTree. Если вам нужно больше аргументов - создайте другую функцию и вызывайте её рекурсивно. dirTree в этом случае может быть только входной точкой.

Символы графики лучше копируйте не из текста задания ( который вы читаете сейчас ), а из исходного кода теста ( main_test.go )

Результаты ( список папок-файлов ) должны быть отсортированы по алфавиту. Т.е. у вас должен быть код который отсортирует уровень. Смотрите для этого пакет sort. Это самая частая причина непрохождения тестов. Тесты запускаются в среде linux. В задании есть докер-файл для тестов ровно в тех же условиях, он сразу выявит все проблемы.

У вас может быть соблазн использовать глобальные переменные, но вариант с рекурсией проще получается без них, а в нерекурсивном варианте они вообще не нужны

сигнатуру функции dirTree ( количество параметров ) менять нельзя, тесты на сервере не пройдут

если вы столкнётесь с несовместимостью os.File и bytes.Buffer - смотрите видео "Написание тестов для программы уникализации", uniq/wint_tests в коде в уроку, а так же ссылку на хабр ниже

На MacOS может быть проблема с системным файлом .DS_Store - его можно просто игнорировать в самой программе, или же настроить dockerignore:

**/*.DS_Store
**/.git

Материалы в помощь:

https://habrahabr.ru/post/306914/ - пакет io

https://golang.org/pkg/sort/

https://golang.org/pkg/io/

https://golang.org/pkg/io/ioutil/

About

Утилита tree. Выводит дерево каталогов и файлов (если указана опция -f).

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages