https://github.com/shubnikofff/hw1_tree
Utility print tree of catalogs and files
https://github.com/shubnikofff/hw1_tree
Last synced: 27 days ago
JSON representation
Utility print tree of catalogs and files
- Host: GitHub
- URL: https://github.com/shubnikofff/hw1_tree
- Owner: shubnikofff
- Created: 2018-09-21T05:46:33.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2018-09-25T13:19:35.000Z (over 6 years ago)
- Last Synced: 2024-12-25T11:43:24.713Z (6 months ago)
- Language: Go
- Homepage:
- Size: 77.1 KB
- Stars: 1
- Watchers: 1
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Утилита 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)
├───zline
│ └───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` - его можно просто игнорироватьМатериалы в помощь:
* https://habrahabr.ru/post/306914/ - пакет io
* https://golang.org/pkg/sort/
* https://golang.org/pkg/io/
* https://golang.org/pkg/io/ioutil/