Это шаблон репозитория для сквозного проекта «Менеджер задач» (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из раздела «Команды проверки» ниже работают всегда, без дополнительных инструментов.
-
Создайте свой репозиторий на GitHub из этого шаблона: на странице шаблона нажмите зелёную кнопку Use this template → Create a new repository, затем склонируйте получившийся репозиторий на устройство. Не используйте fork — fork сохраняет связь с этим шаблоном как с upstream, и GitHub будет предлагать отправить pull request обратно в шаблон, а не в ваш собственный репозиторий.
Репозиторий делайте публичным. Так наставник сразу видит вашу работу, и ничего дополнительно настраивать не нужно. Если по личным причинам нужен приватный — согласуйте это с наставником заранее и дайте ему доступ, иначе он не увидит ваш pull request.
-
Откройте
go.modи заменитеUSERNAMEна свой логин GitHub:module github.com/USERNAME/golang-basic-homeworks -
Выполните
go mod tidy, чтобы проверить, что модуль корректно инициализирован. -
Запустите проект и убедитесь, что он работает:
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. Если проверка красная:
- откройте лог упавшего шага — там указано, что именно не прошло;
- исправьте проблему локально и убедитесь, что
make check(илиtask check) проходит; - сделайте новый коммит в ту же ветку и запушьте его — pull request обновится, и проверка запустится заново.
Настраивать сам workflow не нужно: он уже готов и одинаков для всех домашних заданий.
Общие требования к сдаче ДЗ говорят: «в корне должен быть файл README.md
с описанием проекта». Этот файл им и станет — отдельный заводить не нужно.
Дополните его описанием своего проекта: что это за программа, как её запустить, что она уже умеет. Обновлять описание стоит вместе с кодом, а не один раз в конце: чек-лист pull request про это спрашивает при каждой сдаче.
Справочные разделы — требования к окружению, команды проверки, устройство автопроверки — можно оставить как есть, они пригодятся весь курс.
Полный порядок — ветка, коммиты, pull request, ревью, слияние — в docs/submitting.md. Прочитайте перед сдачей ДЗ-2: именно с него начинается работа с ветками. Дальше возвращайтесь к нему перед каждым заданием, пока последовательность не станет привычной. Там же — пять ошибок, из-за которых работы возвращают чаще всего.
Вживую этот порядок разбирается на занятии 2 «Работа с Git».
Списки требований по каждому заданию — в docs/checklists.md. Ничего сверх условия задания в них нет: у каждого пункта указано, откуда он взят.
Пройдите список до того, как позовёте ментора: так вы увидите результат сразу, не дожидаясь ревью. Читать нужно только общий раздел и раздел текущего задания — заглядывать в будущие ДЗ сейчас незачем.