Skip to content

Latest commit

 

History

History
42 lines (26 loc) · 3.5 KB

README.md

File metadata and controls

42 lines (26 loc) · 3.5 KB

Тестовое задание FamilyTeam на должность Golang-разработчика

Постановка задачи

У вас имеется ZIP-архив (MIME: application/zip), в котором содержится несколько произвольных файлов.

От коллеги вам поступил запрос на написание веб-сервиса, который выводил бы список файлов с определенным расширением в этом ZIP-архиве на веб-страницу.

Для этого необходимо написать программу, которая:

  1. откроет ZIP-архив и получит список содержащихся в нем файлов;
  2. создаст HTTP-сервер на произвольном порту;
  3. при входящем запросе на HTTP-сервер программа должна отобразить список файлов.

Итоговый результат необходимо разместить в репозиторий на GitHub.

Обязательные требования

  1. Golang (версия >= 1.21);
  2. Для HTTP-сервера используется фреймворк Chi: https://github.com/go-chi/chi;
  3. Путь к ZIP-файлу и расширение файлов в ZIP-архиве передаются в качестве параметров командной строки при запуске программы;
  4. Программа должна реагировать на Ctrl+C (сигнал SIGINT для Linux, SIGTERM для Windows). Если у программы не открыто никаких ресурсов, которые следует завершить, то будет достаточно, чтобы при получении Ctrl+C просто выводилось сообщение о том, что программа завершает работу.
  5. При выдаче файла программа должна логировать событие в stdout командной строки. Для логирования можно использовать любой структурированный логгер, например, log/slog (https://pkg.go.dev/log/slog), или zap (https://github.com/uber-go/zap).

Пример

Запускаем программу:
./zipview --port 80 --file ./test.zip --ext ".c"

Открываем браузер (http://localhost:80):
image

Примечания

Подразумевается, что в архиве присутствуют только файлы: директорий там нет.

Архив достаточно парсить один раз при запуске программы - в ходе работы программы архив не будет изменяться.

Список можно отображать в любом формате: оформление HTML-страницы приветствуется, но не требуется.

Для обработки ZIP-файла можно использовать встроенный пакет archive/zip.

Можно использовать любые архитектурные решения, главное, чтобы программа соответствовала ТЗ.