https://github.com/JetBrains/go-modern-guidelines
Ребята из JetBrains сделали набор гайдлайнов для AI-агентов (Claude Code и Junie), чтобы те писали современный Go, а не код образца 2018 года.
Проблема реальная и знакомая каждому, кто пользуется ИИ-ассистентами для Go:
- Отсечка данных: модели не знают фичи, добавленные после их обучения. Claude Opus 4.6 обучен по май 2025 — про Go 1.26 он не в курсе.
- Частотный перекос: в тренировочных данных в разы больше
for i := 0; i < n; i++, чем for i := range n. Модель выбирает то, что встречала чаще.В результате агент вместо
slices.Contains(roles, role) пишет ручной цикл на 7 строк, вместо new("hello") городит s := "hello"; &s, а про errors.AsType[T] вообще не слышал.Что делает плагин:
- Определяет версию Go из go.mod
- Инструктирует агента использовать фичи только до этой версии включительно
- Покрывает всё от Go 1.0 до 1.26:
cmp.Or, min/max, wg.Go(), b.Loop(), strings.SplitSeq, new(val) и т.д.Как подключить:
- В Junie (GoLand) — работает из коробки начиная с версии 2xx.620.xx
- В Claude Code — ставится как плагин, активируется командой
/use-modern-go🟢Ребята из GoLand Team протестировали его на 40 примерах и убедились, что без гайдлайнов Claude Code пишет откровенно устаревший код.
————
А что на счёт go fix?
Как мы помним, в Go 1.26 полностью переписали
go fix. Теперь это мощный инструмент с 20+ анализаторами-модернизаторами 👍
minmax, rangeint, slicescontains, stringscut, mapsloop, forvar, newexpr и другие. Одна команда go fix ./... — и ваш код автоматически переписывается на современные идиомы.Go Team сами признались, что LLM-ассистенты — одна из причин, почему они взялись за modernize-анализаторы. Чтобы в тренировочных данных было больше современного кода, нужно сначала модернизировать существующий.
Так решает ли go fix ту же задачу?
Частично — да. Если ваш агент написал
for i := 0; i < n; i++ вместо for range n, go fix это подчистит. Но есть нюанс: go fix работает постфактум с уже написанным кодом, а гайдлайны JetBrains заставляют агента писать правильно с самого начала. Это два дополняющих друг друга подхода: один — «пиши сразу нормально», другой — «подстрахуем на всякий случай».Мой совет: подключайте гайдлайны + гоняйте
go fix после каждого обновления тулчейна. Ну или, как один из комментаторов на HN предложил, добавьте golangci-lint с modernize-линтером в CLAUDE.md — пусть агент сам за собой убирает.🟠Важно! Проект свежий и полностью открытый, любой вклад приветствуются — можно добавлять поддержку других агентов, новые правила и любые улучшения. Ребята из GoLand Team будут только рады. Мне об этом лично сказали.
#ai #tools