Skip to Content
Онбординг01. Setup

01. Установка окружения

Этот документ описывает минимальный набор инструментов, который должен быть на твоей машине, прежде чем ты начнёшь работать над кодом. Если что-то из списка не установлено — ставь, не пропускай.

Что нужно поставить

ИнструментВерсияНазначение
Go1.22+ (желательно последняя стабильная)Основной язык всех backend-сервисов
DockerDesktop (Win/macOS) или Engine (Linux)Локальные зависимости: Postgres, Redis, Kafka
makeлюбая GNU makeСборка, тесты, docker-compose wrapper
golangci-lint1.60+Статический анализ перед коммитом
migrateCLI golang-migrate 4.xРабота с SQL-миграциями вручную
jq1.6+Разбор JSON из curl в Makefile-тестах
git2.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.

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

Last updated on