Files
pi-kit/skills/go-standards/SKILL.md
Aleksey Shakhmatov e04a2ddb72 docs(skills): fill language standards with industry defaults
Per decision to use common industry practice now and tune later:
- structures: standard layouts (go cmd/internal/pkg, python src-layout, rust cargo, ts pnpm workspaces, kotlin Gradle modules, swift SwiftPM)
- linters: default rulesets (golangci base, clippy -D warnings, ruff+mypy, typescript-eslint+prettier, ktlint+detekt, swiftlint+swiftformat)
- test runners: TS=vitest; coverage soft targets (~70-80%) marked '(пороги уточним)'
- swift deps: SwiftPM (Package.resolved), CocoaPods legacy-only
- reworded intros: values are industry defaults to be tuned, no raw TODO markers left

Verified: no TODO markers remain in *-standards; all six skills load via pi.
2026-07-16 13:25:18 +03:00

4.1 KiB
Raw Blame History

name, description
name description
go-standards Используй при написании, ревью и проверке кода на Go в наших сервисах — структура сервиса, запуск линтеров и тестов, формат коммитов и merge request. Применяй всегда, когда пишешь или правишь Go-код, готовишь MR, а также в командах /bugfix, /feature и /review.

Стандарты Go

Наш основной стек — Go. Скилл описывает, как писать, проверять и оформлять код. Реалистичные общепринятые дефолты приведены ниже; то, что специфично для компании, заполнено дефолтами индустрии — тюним под M.Video позже.

Структура сервиса

Ориентир (уточняется под компанию):

cmd/<service>/main.go      # точка входа
internal/                  # приватный код сервиса
  <domain>/                # доменные пакеты
pkg/                       # переиспользуемый публичный код (если есть)
api/                       # спецификации API (proto/openapi)

Ориентир по индустрии: cmd/ + internal/ + pkg/. Эталон под M.Video уточним позже.

Линтеры

  • Форматирование: gofmt -l -w . и goimports -w . — код должен быть отформатирован.
  • Статический анализ: go vet ./....
  • Основной линтер: golangci-lintgolangci-lint run ./.... Набор линтеров задаётся в .golangci.yml в корне репозитория. Базовый набор: govet, staticcheck, errcheck, ineffassign, gosimple, unused. Корпоративный .golangci.yml добавим позже.

Тесты

  • Прогон всех тестов: go test ./....
  • С гонками и покрытием: go test -race -cover ./....
  • Покрытие: мягкий ориентир ~70%+ для бизнес-логики, критичные пути — обязательно; интеграционные тесты для внешних зависимостей. (пороги уточним)
  • Именование: TestXxx, табличные тесты приветствуются.

Коммиты и MR

  • Формат коммитов: Conventional Commits (feat:, fix:, chore:, docs:, refactor:, test: …).
  • Ветки и деплой: фича-ветки — от main (в имя ветки желательно включать ключ тикета). Деплой управляется ветками/тегами: ветка release-* → раскатка на stage; тег v* → раскатка в прод. Ветки release-* и теги v* без необходимости не пушь — permission-gate переспросит.
  • MR обязателен (см. корпоративные правила из контекста сессии). Прямой push в защищённые ветки запрещён — расширение permission-gate дополнительно переспросит.
  • Описание MR: что и зачем изменено, как проверено (линтеры + тесты), ссылка на тикет (см. скилл jira-workflow).
  • Перед MR прогони линтеры и тесты — всё должно быть зелёным.

Чек-лист перед MR

  • gofmt/goimports без изменений
  • go vet ./... чисто
  • golangci-lint run ./... чисто
  • go test ./... (или -race) зелёные
  • есть тесты на новую логику / фикс
  • нет секретов и закоммиченных .env
  • описание MR со ссылкой на тикет