Язык Go меняется медленно и предсказуемо: новые версии не ломают обратную совместимость, но заметно меняют то, как пишутся привычные вещи. Самый яркий пример — Go 1.22, где переменная цикла стала создаваться заново на каждой итерации. Код, который раньше считался корректным, перестал ловиться детектором гонок, а новые проекты можно писать без лишних копий переменной.
Другие изменения заметно меньше по масштабу, но по влиянию на ежедневную работу сопоставимы: пакеты slices и maps убрали самописные хелперы, log/slog дал структурированное логирование в стандартной библиотеке, а ошибки.Join — способ собрать несколько ошибок в одну без потери цепочки. А в Go 1.25 появился WaitGroup.Go, который убирает самый частый источник паник в конкурентном коде.
Ниже — таймлайн с фильтром по темам. Выберите свою версию компилятора, и изменения, которых у вас ещё нет, будут помечены: это и есть самый практичный повод обновиться.
Отдельный сюжет — совместимость. Go обещает обратную совместимость в рамках ветки 1.x, поэтому обновление почти никогда не ломает код. Но новые версии приносят не только возможности: в релизе могут быть исправления безопасности и ускорения, о которых вы не узнаете из заметок. Практика простая: держите версию, которая вышла не меньше чем полгода назад, и обновляйтесь регулярно, а не раз в год. К каждому изменению ниже приложено объяснение «что это даёт тебе» — без него список релизов превращается в справочник, который никто не читает.