Перейти к содержанию

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 version
# go version go1.22.x или новее

Добавь $(go env GOPATH)/bin в PATH — туда попадают бинарники, поставленные через go install.

Docker

  • Windows / macOS — Docker Desktop. Включи интеграцию с WSL 2 на Windows.
  • Linux — Docker Engine + compose plugin. Убедись, что docker compose (без дефиса) работает.

Проверь:

docker --version
docker compose version

make

  • Linux/macOS — идёт из коробки или ставится apt install make / brew install make.
  • Windows — либо через WSL 2, либо choco install make.

golangci-lint

go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
golangci-lint --version

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

И сделай его исполняемым:

chmod +x .git/hooks/pre-commit

Если тебе удобнее — поставь pre-commit (https://pre-commit.com) и сконфигурируй через .pre-commit-config.yaml. Любой способ ОК, главное — чтобы линтер и gofmt отработали до того, как ты открыл PR.

Проверка

Перейди в клон любого сервис-репо (например, ~/projects/user) и запусти:

cd ~/projects/user
make deps
make lint
make test

Если все три шага прошли без ошибок — окружение готово. Переходи к 02-first-pr.md.

Если что-то упало — смотри troubleshooting/ или пиши в backend-канал.