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

64 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: go-standards
description: Используй при написании, ревью и проверке кода на 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-lint**`golangci-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 со ссылкой на тикет