Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

8 Commits

Folders and files

Repository files navigation

Менеджер задач — домашние задания курса Go Basic

Это шаблон репозитория для сквозного проекта «Менеджер задач» (To-Do List), который вы развиваете от занятия к занятию на курсе Go Basic. Каждое домашнее задание добавляет в проект новый функционал: сначала консольный вывод и валидацию, затем структуры и хранилище, параллельную обработку, сохранение в файлы и в PostgreSQL, а под конец — REST API и тесты.

Что нужно к первому заданию

Чтобы проверить, что шаблон запускается у вас, достаточно Go и двух команд:

go version
go run ./cmd/todo

Если обе отработали — локальная часть ДЗ-1 выполнена.

Для всего ДЗ-1 понадобится ещё: Git, учётная запись на GitHub, IDE и сам репозиторий, созданный из этого шаблона. Короткий порядок — в разделе «Первые шаги» ниже; подробная инструкция по установке Go, Git и IDE — в материалах занятия 1.

Task и golangci-lint пока ставить не нужно: они понадобятся с занятия 3.

Требования к окружению

Полный список — что поставить, чтобы заработало всё в этом репозитории. Go и Git нужны сразу, остальное — по мере курса.

  • Git. Нужен для сдачи домашних заданий. Установка и проверка — в материалах занятия 1; работа с ветками и pull request разбирается на занятии 2.

  • Go, не ниже версии из go.mod (сейчас go 1.26). Обязателен: без него не работает ничего в этом репозитории. Проверить установленную версию:

    go version
    

    Пример вывода: go version go1.27.0 linux/amd64.

  • Task — не сейчас, понадобится с занятия 3. До него хватает go. Ставится командой:

    go install github.com/go-task/task/v3/cmd/task@latest
    

    Проверено на 3.43.2 и новее. Проверить установленную версию:

    task --version
    

    Пример вывода: 3.49.1.

  • golangci-lint — тоже не сейчас, с занятия 3. Он нужен для цели lint и для того, чтобы автоматическая проверка pull request проходила локально с тем же результатом. Ставится командой:

    go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.13.2
    

    Версия указана намеренно. В автоматической проверке закреплена ровно v2.13.2, и @latest даст локально другую: набор правил у линтера меняется от версии к версии, и тогда локально чисто, а в pull request красно. Ставьте ту же.

    Проверить установленную версию:

    golangci-lint --version
    

    Пример вывода: golangci-lint has version 2.13.2 built with go1.27.0....

  • make — необязателен. На Windows он обычно не установлен, и это нормально: все те же проверки доступны через task, а если нет ни make, ни task — команды go из раздела «Команды проверки» ниже работают всегда, без дополнительных инструментов.

Первые шаги

  1. Создайте свой репозиторий на GitHub из этого шаблона: на странице шаблона нажмите зелёную кнопку Use this template → Create a new repository, затем склонируйте получившийся репозиторий на устройство. Не используйте fork — fork сохраняет связь с этим шаблоном как с upstream, и GitHub будет предлагать отправить pull request обратно в шаблон, а не в ваш собственный репозиторий.

    Репозиторий делайте публичным. Так наставник сразу видит вашу работу, и ничего дополнительно настраивать не нужно. Если по личным причинам нужен приватный — согласуйте это с наставником заранее и дайте ему доступ, иначе он не увидит ваш pull request.

  2. Откройте go.mod и замените USERNAME на свой логин GitHub:

    module github.com/USERNAME/golang-basic-homeworks
    
  3. Выполните go mod tidy, чтобы проверить, что модуль корректно инициализирован.

  4. Запустите проект и убедитесь, что он работает:

    go run ./cmd/todo
    

    В консоли должно появиться приветственное сообщение.

Что делает go mod init и почему модуль называют по адресу репозитория, разбирается на занятии 3 «Инструментарий Go, модули». Здесь go.mod уже готов — создавать его руками не нужно.

Структура проекта

.
├── cmd/todo/main.go   точка входа приложения
├── go.mod             модуль проекта (go 1.26)
├── .golangci.yml       конфигурация линтера
├── Makefile            цели проверки для Linux/macOS и Windows с POSIX-окружением
├── Taskfile.yml         те же цели без зависимости от внешней оболочки
└── .github/
    ├── pull_request_template.md   шаблон описания pull request
    └── workflows/check.yml        автоматическая проверка ДЗ

Если часть терминов в списке ниже пока незнакома — это нормально и изучать их заранее не нужно: каждый появится на своём занятии.

Как проект растёт

Репозиторий один на все двенадцать заданий, и каждое продолжает предыдущее — отдельных каталогов под ДЗ нет, код развивается на месте. Таблица ниже — ориентир, чтобы понимать, что впереди. Точные требования всегда в тексте задания: если он расходится с этой таблицей, прав он.

ДЗ Занятие Что появляется в проекте
1 1 репозиторий из этого шаблона
2 2 проверенный go.mod, запускающийся cmd/todo/main.go
3 6 список задач в коде, консольное меню, фильтр по статусу
4 9 пакет валидации: sentinel-ошибки, ValidateTask, повторный ввод
5 12 пакет с типом Task: свой тип статуса, конструктор, методы
6 13 пакет хранилища в памяти, CRUD, меню из семи пунктов
7 16 каналы, воркер-пул, обработка задач параллельно
8 18 graceful shutdown, таймауты на обработку
9 22 сохранение в файл: JSON и CSV, выбор формата
10 23 хранилище в PostgreSQL, выбор хранилища конфигурацией
11 26 REST API на net/http поверх того же хранилища
12 27 тесты: табличные, testify, httptest для обработчиков

Имена пакетов задания называют сами (internal/task, internal/storage и так далее) — придумывать их не нужно.

Команды проверки

Одни и те же проверки, в одном и том же составе и порядке, доступны в трёх формах — выбирайте ту, что удобнее: форматирование, go vet, сборка, линтер, тесты.

Через go напрямую:

gofmt -l .
go vet ./...
go build ./...
golangci-lint run ./...
go test ./...

Через make (нужен установленный GNU Make и POSIX-окружение — на Windows, например, WSL или MSYS2; в состав Git for Windows make не входит):

make build
make test
make vet
make fmt-check
make lint
make check
make run

Через task (нужен установленный Task, от внешней оболочки не зависит):

task build
task test
task vet
task fmt-check
task lint
task check
task run

Цель check в обеих формах — это fmt-check → vet → build → lint → test, в этом порядке, одной командой. Именно её стоит запускать перед тем, как отправлять домашнее задание на проверку — состав ровно тот же, что заложен в go-команды выше и в автоматическую проверку на GitHub (следующий раздел), поэтому результат make check/task check совпадает с тем, что увидите в pull request.

Начиная с ДЗ-3 запускайте check перед каждой сдачей. До этого достаточно go build ./... и go test ./...: gofmt, go vet, линтер и сами make/task разбираются на занятии 3 «Инструментарий Go, модули», и требовать их раньше незачем — автоматическая проверка в pull request всё равно прогонит их за вас.

После занятия 3 от вас требуется запускать check перед сдачей, а не понимать устройство каждой из команд внутри.

Автоматическая проверка

При каждом pull request и при каждом push в main запускается GitHub Actions: workflow .github/workflows/check.yml проверяет форматирование, go vet, сборку, линтер (golangci-lint) и тесты — в этом порядке, тот же состав и тот же результат, что и у make check/task check локально.

Результат смотрите на вкладке Checks в pull request. Если проверка красная:

  1. откройте лог упавшего шага — там указано, что именно не прошло;
  2. исправьте проблему локально и убедитесь, что make check (или task check) проходит;
  3. сделайте новый коммит в ту же ветку и запушьте его — pull request обновится, и проверка запустится заново.

Настраивать сам workflow не нужно: он уже готов и одинаков для всех домашних заданий.

Этот README — теперь ваш

Общие требования к сдаче ДЗ говорят: «в корне должен быть файл README.md с описанием проекта». Этот файл им и станет — отдельный заводить не нужно.

Дополните его описанием своего проекта: что это за программа, как её запустить, что она уже умеет. Обновлять описание стоит вместе с кодом, а не один раз в конце: чек-лист pull request про это спрашивает при каждой сдаче.

Справочные разделы — требования к окружению, команды проверки, устройство автопроверки — можно оставить как есть, они пригодятся весь курс.

Как сдавать ДЗ

Полный порядок — ветка, коммиты, pull request, ревью, слияние — в docs/submitting.md. Прочитайте перед сдачей ДЗ-2: именно с него начинается работа с ветками. Дальше возвращайтесь к нему перед каждым заданием, пока последовательность не станет привычной. Там же — пять ошибок, из-за которых работы возвращают чаще всего.

Вживую этот порядок разбирается на занятии 2 «Работа с Git».

Что проверяет ментор

Списки требований по каждому заданию — в docs/checklists.md. Ничего сверх условия задания в них нет: у каждого пункта указано, откуда он взят.

Пройдите список до того, как позовёте ментора: так вы увидите результат сразу, не дожидаясь ревью. Читать нужно только общий раздел и раздел текущего задания — заглядывать в будущие ДЗ сейчас незачем.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages