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.
4.1 KiB
4.1 KiB
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-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 со ссылкой на тикет