Команда Go for Devs подготовила перевод статьи о том, как Go отмечает шестнадцать лет в Open source. От новых инструментов для тестирования и профилирования до модернизаторов кода, MCP и прорывов в производительности — язык переживает один из самых насыщенных периодов развития.


В этот понедельник, 10 ноября, мы отметили 16-ю годовщину выхода Go в Open source!

В феврале мы выпустили Go 1.24, а в августе — Go 1.25, продолжая наш уже устоявшийся и предсказуемый ритм релизов. Двигаясь к цели создать самую продуктивную языковую платформу для построения промышленных систем, мы добавили новые API для создания надёжного софта, сделали серьёзный шаг вперёд в истории Go как языка для безопасных систем и внесли мощные улучшения «под капотом». Тем временем невозможно игнорировать тектонические сдвиги, которые в нашу индустрию принес генеративный ИИ. Команда Go применяет свой вдумчивый и принципиальный подход к задачам и возможностям этой стремительно развивающейся области, чтобы привнести в мир ИИ Go-подход к созданию продакшн-готовых интеграций, продуктов, агентов и инфраструктуры.

Улучшения языка и стандартной библиотеки

Впервые появившийся в Go 1.24 как экспериментальный, а затем ставший стабильным в Go 1.25, пакет testing/synctest заметно упрощает написание тестов для конкурентного и асинхронного кода. Такой код особенно часто встречается в сетевых сервисах и традиционно очень труден для качественного тестирования. Пакет synctest работает за счёт виртуализации времени. Он превращает тесты, которые раньше были медленными, нестабильными или и тем и другим сразу, в надёжные и почти мгновенные — нередко всего пара строк дополнительного кода. Это также отличный пример интегрированного подхода Go к разработке: за почти тривиальным API скрывается глубокая интеграция с рантаймом и другими частями стандартной библиотеки.

Это не единственное улучшение в пакете testing за последний год. Новый API testing.B.Loop проще в использовании, чем прежний testing.B.N, и устраняет множество классических — и нередко почти незаметных! — подводных камней при написании Go-бенчмарков. Также появились новые API, упрощающие очистку ресурсов в тестах, использующих Context, и облегчающие запись в лог теста.

Go и контейнеризация выросли вместе и прекрасно сочетаются. Go 1.25 представил планировщик, учитывающий работу в контейнерах, ещё больше усилив эту связку. Разработчикам не нужно ничего менять — среда выполнения Go автоматически подстраивает уровень параллелизма внутри контейнера, предотвращая троттлинг CPU, который может ухудшать хвостовые задержки, и улучшая «продакшн-готовность» Go по умолчанию.

Новый flight recorder в Go 1.25 развивает идеи уже мощного execution tracer и даёт глубокое понимание динамики поведения продакшн-систем. Тогда как execution tracer обычно собирал слишком много информации, чтобы быть пригодным в долгоживущих сервисах, flight recorder работает как маленькая машина времени: позволяет сервису создавать подробный снимок последних событий после того, как что-то пошло не так.

Безопасная разработка

Go продолжает укреплять приверженность безопасной разработке, делая значимые шаги вперёд в своих нативных криптопакетах и развивая стандартную библиотеку в сторону большей безопасности.

В стандартную библиотеку Go входит полный набор нативных криптографических пакетов, которые в прошлом году достигли сразу двух важных вех. Аудит безопасности от независимой компании Trail of Bits показал отличные результаты — лишь одну находку низкой серьёзности. Кроме того, благодаря совместным усилиям команды Go Security и компании Geomys эти пакеты получили сертификат CAVP, открыв путь к полноценной сертификации FIPS 140-3. Это крайне важно для пользователей Go в регулируемых областях. Соответствие FIPS 140, которое раньше было источником сложностей из-за необходимости применять неподдерживаемые решения, теперь будет обеспечиваться «из коробки», закрывая вопросы безопасности, удобства разработки, возможностей, скорости релизов и соответствия стандартам.

Стандартная библиотека Go продолжает развиваться так, чтобы быть безопасной по умолчанию и по замыслу. Например, API os.Root, появившийся в Go 1.24, обеспечивает доступ к файловой системе с защитой от обхода каталогов, эффективно предотвращая класс уязвимостей, позволяющих атакующему заставить программу обратиться к файлам, которые должны быть недоступны. Такие уязвимости известны тем, что их трудно устранить без поддержки на уровне платформы и ОС, и новый os.Root предлагает простое, единое и переносимое решение.

Улучшения «под капотом»

Помимо пользовательских изменений, Go получил множество серьёзных улучшений «под капотом» за прошедший год.

В Go 1.24 мы полностью переработали реализацию map, основываясь на новейших идеях в дизайне хеш-таблиц. Изменение полностью прозрачное и приносит заметный рост производительности map, снижает хвостовые задержки операций с map и в некоторых случаях даёт ощутимую экономию памяти.

Go 1.25 включил экспериментальное, но серьёзное улучшение сборщика мусора под названием Green Tea. Green Tea снижает накладные расходы GC во многих приложениях минимум на 10%, а порой — до 40%. Он использует новый алгоритм, спроектированный под возможности и ограничения современной аппаратуры, и открывает новое пространство для дальнейших улучшений. Например, в готовящемся Go 1.26 Green Tea даст дополнительное снижение накладных расходов GC ещё на 10% на процессорах с поддержкой векторных инструкций AVX-512 — чего было бы практически невозможно достичь со старым алгоритмом. В Go 1.26 Green Tea будет включён по умолчанию; пользователям достаточно просто обновить Go.

Продвижение всей платформы разработки

Go — это гораздо больше, чем язык и стандартная библиотека. Это полноценная платформа разработки, и за год мы выпустили четыре регулярных релиза языкового сервера gopls, а также заключили партнёрства для поддержки новых фреймворков агентных приложений.

Gopls обеспечивает поддержку Go в VS Code и других LSP-редакторах и IDE. Каждый релиз приносит множество улучшений в опыт чтения и написания Go-кода (подробности — в заметках о релизах v0.17.0, v0.18.0, v0.19.0 и v0.20.0 или в новой документации по возможностям gopls). Среди ключевых улучшений — новые и улучшенные анализаторы, помогающие писать более идиоматичный и устойчивый Go-код; рефакторинг для извлечения переменных, инлайнинга переменных и JSON struct tags; а также экспериментальный встроенный сервер для Model Context Protocol (MCP), который предоставляет ассистентам ИИ часть возможностей gopls в виде MCP-инструментов.

В gopls v0.18.0 мы начали исследовать автоматические «модернизаторы» кода. По мере развития Go каждый релиз приносит новые возможности и новые идиомы — новые, лучшие способы решать задачи, которые до сих пор решались обходными путями. Go соблюдает своё обещание совместимости — старые подходы будут работать всегда, — но это всё равно создаёт разрыв между старыми и новыми идиомами. Модернизаторы — это инструменты статического анализа, которые распознают старые идиомы и надёжно предлагают более быстрые, читаемые, безопасные и современные замены. Мы надеемся, что модернизаторы смогут для идиоматической согласованности сделать то же, что gofmt сделал для стилистической. Мы встроили модернизаторы в подсказки IDE, где они помогают разработчикам поддерживать единые стандарты и, как мы считаем, помогают открывать новые возможности языка и следить за актуальным состоянием экосистемы. Мы также верим, что модернизаторы помогут ассистентам-ИИ не отставать от актуальных практик и противостоять их склонности закреплять устаревшие знания о Go, его API и идиомах. В Go 1.26 выйдет полностью обновлённая версия команды go fix, которая будет применять весь набор модернизаторов сразу — возвращение к её истокам до Go 1.0.

В конце сентября, совместно с Anthropic и сообществом Go, мы выпустили v1.0.0 официального Go SDK для Model Context Protocol (MCP). Этот SDK поддерживает и MCP-клиентов, и MCP-серверы и лежит в основе новой MCP-функциональности в gopls. Публикуя эту работу в Open source, мы помогаем развиваться другим проектам растущей агентной Open source-экосистемы вокруг Go, например недавно представленному Agent Development Kit (ADK) для Go от Google. ADK Go опирается на Go MCP SDK и предлагает идиоматичный фреймворк для создания модульных мультиагентных систем и приложений. Go MCP SDK и ADK Go показывают, как уникальные сильные стороны Go — конкурентность, производительность и надёжность — выделяют его в продакшн-разработке ИИ. Мы ожидаем, что в ближайшие годы всё больше ИИ-нагрузок будет писаться на Go.

Взгляд в будущее

Go ждёт насыщенный год.

Мы работаем над повышением продуктивности разработчиков через новый go fix, углублённую поддержку ассистентов-ИИ и дальнейшие улучшения gopls и VS Code Go. Появление в широком доступе сборщика мусора Green Tea, нативная поддержка SIMD-инструкций и улучшения рантайма и стандартной библиотеки для ещё лучшей масштабируемости на многопроцессорном оборудовании продолжат синхронизировать Go с современной аппаратурой и повышать эффективность продакшн-систем. Мы фокусируемся на библиотеках и инструментах «продакшн-стека» Go, включая масштабное (и давно готовящееся) обновление encoding/json, которое ведёт Джо Цай вместе с участниками сообщества Go; профилирование протекающих goroutine, созданное командой Uber Programming Systems; и множество улучшений в net/http, unicode и других ключевых пакетах. Мы стремимся прокладывать хорошо обозначенные пути для разработки с Go и ИИ, развивая языковую платформу с учётом меняющихся потребностей современных разработчиков и создавая инструменты и возможности, которые помогают как людям-разработчикам, так и ассистентам и системам ИИ.

В эту 16-ю годовщину выхода Go в Open source мы также смотрим в будущее самого проекта Go. Из скромного начала выросло живое сообщество контрибьюторов. Чтобы и дальше соответствовать потребностям постоянно растущей аудитории, особенно в период серьёзных перемен в индустрии, мы работаем над тем, как сделать процессы разработки Go более масштабируемыми — не теряя при этом фундаментальных принципов Go — и глубже вовлекать наше замечательное сообщество.

Go не был бы тем, чем он является сегодня, без нашего удивительного сообщества пользователей и контрибьюторов. Мы желаем вам всего наилучшего в наступающем году!

Русскоязычное Go сообщество

Друзья! Эту статью подготовила команда «Go for Devs» — сообщества, где мы делимся практическими кейсами, инструментами для разработчиков и свежими новостями из мира Go. Подписывайтесь, чтобы быть в курсе и ничего не упустить!

Комментарии (0)