01. Установка окружения¶
Этот документ описывает минимальный набор инструментов, который должен быть на твоей машине, прежде чем ты начнёшь работать над кодом. Если что-то из списка не установлено — ставь, не пропускай.
Что нужно поставить¶
| Инструмент | Версия | Назначение |
|---|---|---|
| Go | 1.22+ (желательно последняя стабильная) | Основной язык всех backend-сервисов |
| Docker | Desktop (Win/macOS) или Engine (Linux) | Локальные зависимости: Postgres, Redis, Kafka |
| make | любая GNU make | Сборка, тесты, docker-compose wrapper |
| golangci-lint | 1.60+ | Статический анализ перед коммитом |
| migrate | CLI golang-migrate 4.x | Работа с SQL-миграциями вручную |
| jq | 1.6+ | Разбор JSON из curl в Makefile-тестах |
| git | 2.30+ | Контроль версий |
Опционально, но рекомендуется:
swag— если твой сервис использует Swagger-аннотации (go install github.com/swaggo/swag/cmd/swag@latest).openssl— нужен для генерации dev-секретов (make jwt-secret).curl/httpie— ручные проверки HTTP API.
Установка¶
Go¶
Ставь через официальный инсталлятор с https://go.dev/dl/ или через пакетный
менеджер (brew install go, apt install golang-go, choco install golang).
Проверь версию:
Добавь $(go env GOPATH)/bin в PATH — туда попадают бинарники, поставленные
через go install.
Docker¶
- Windows / macOS — Docker Desktop. Включи интеграцию с WSL 2 на Windows.
- Linux — Docker Engine + compose plugin. Убедись, что
docker compose(без дефиса) работает.
Проверь:
make¶
- Linux/macOS — идёт из коробки или ставится
apt install make/brew install make. - Windows — либо через WSL 2, либо
choco install make.
golangci-lint¶
migrate¶
go install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest
migrate -version
jq¶
- Linux:
apt install jq - macOS:
brew install jq - Windows:
choco install jqили бинарник с https://jqlang.org/.
Настройка Git¶
Сразу после установки git пропиши своё имя и рабочий email:
git config --global user.name "Имя Фамилия"
git config --global user.email "you@example.com"
git config --global init.defaultBranch main
git config --global pull.rebase true
Настрой SSH-ключ для git-хостинга команды. Проверь, что ключ работает
(ssh -T git@<your-host>).
Клонирование репозиториев¶
Каждый сервис — отдельный git-репозиторий. Локально под каждый сервис ты делаешь отдельный клон в свою папку проектов. Это не подпапки одного репо — это независимые клоны рядом.
mkdir -p ~/projects
cd ~/projects
git clone <url-репо-user-service> user
git clone <url-репо-review-service> review
git clone <url-репо-media-service> media
git clone <url-репо-notification-service> notification
# этот handbook тоже — отдельный репо
git clone <url-репо-backend-docs> backend-docs
Рекомендуемая структура локальной машины — папки рядом, в каждой по одному клонированному сервис-репо:
~/projects/
├── user/ — клон репо user-service
├── review/ — клон репо review-service
├── media/ — клон репо media-service
├── notification/ — клон репо notification-service
├── backend-docs/ — клон репо этого handbook
└── tools/ — сторонние утилиты, которые ты собираешь из исходников
Клонируй только те сервисы, над которыми реально работаешь. Остальные подтянешь по мере появления задач.
IDE¶
Работай в чём удобно. Два проверенных варианта:
- VS Code + расширение Go (
golang.go). После установки откроет тебе диалог на установкуgopls,dlv,staticcheckи ещё нескольких утилит — соглашайся. Настройки (settings.json):
{
"go.useLanguageServer": true,
"go.formatTool": "goimports",
"go.lintTool": "golangci-lint",
"go.lintOnSave": "package",
"editor.formatOnSave": true,
"[go]": { "editor.defaultFormatter": "golang.go" }
}
- GoLand — всё работает из коробки. Включи
Enable Go modules integrationи поставь golangci-lint плагин.
Pre-commit¶
Перед каждым коммитом код должен быть отформатирован и прогнан через линтер.
Это проще автоматизировать. Создай файл .git/hooks/pre-commit в локальной
копии репозитория:
#!/usr/bin/env bash
set -e
# Проверяем только изменённые файлы
STAGED_GO=$(git diff --cached --name-only --diff-filter=ACM | grep '\.go$' || true)
if [ -n "$STAGED_GO" ]; then
gofmt -l -w $STAGED_GO
git add $STAGED_GO
fi
make lint
И сделай его исполняемым:
Если тебе удобнее — поставь pre-commit (https://pre-commit.com) и
сконфигурируй через .pre-commit-config.yaml. Любой способ ОК, главное —
чтобы линтер и gofmt отработали до того, как ты открыл PR.
Проверка¶
Перейди в клон любого сервис-репо (например, ~/projects/user) и запусти:
Если все три шага прошли без ошибок — окружение готово. Переходи к
02-first-pr.md.
Если что-то упало — смотри
troubleshooting/ или пиши в backend-канал.