Дата публикации:Wed, 11 Feb 2026 10:28:03 +0300
После шести месяцев разработки представлен релиз языка программирования Go 1.26, развиваемого компанией Google при участии сообщества. Язык сочетает высокую производительность, свойственную компилируемым языкам, с такими достоинствами скриптовых языков, как простота написания кода, высокая скорость разработки и защита от ошибок. Код проекта распространяется под лицензией BSD.
Синтаксис Go основан на привычных элементах языка Си с отдельными заимствованиями из языка Оберон. Язык достаточно лаконичен, но при этом код легко читается и воспринимается. Код на языке Go компилируется в обособленные бинарные исполняемые файлы, выполняемые нативно, без использования виртуальной машины (модули профилирования, отладки и другие подсистемы выявления проблем на этапе выполнения интегрируются в виде runtime-компонентов), что позволяет добиться производительности, сопоставимой с программами на языке Си.
Проект изначально разрабатывается с оглядкой на многопоточное программирование и эффективную работу на многоядерных системах. Например, на уровне операторов реализованы средства для организации параллельных вычислений и взаимодействия между параллельно выполняемыми методами. Язык также предоставляет встроенные средства защиты от выхода за границы буфера и обеспечивает возможность использования сборщика мусора.
Среди изменений в новом выпуске:
- Включён по умолчанию сборщик мусора "greenteagc", рассчитанный на повышения производительности создания и сканирования мелких объектов. В приложениях, в которых активно применяется сборка мусора, при использовании "greenteagc" отмечается сокращение накладных расходов на сборку мусора на 10-40%. Во встроенной функции new(), предназначенной для создания новых переменных, появилась возможность указания выражения в качестве операнда, определяющего начальное значение переменной. Например, вместо кода x := int64(300) ptr := &x теперь можно писать: ptr := new(int64(300)) В обобщённых типах (generic) разрешено ссылаться на самого себя в качестве аргумента в списке собственных параметров типа (можно передать тип в свой же параметр). В первой строке показанного ниже примера ссылка Adder на самого себя теперь не приводит к выводу ошибки: type Adder[A Adder[A]] interface { Add(A) A } func algo[A Adder[A]](x, y A) A { return x.Add(y) } Накладные расходы при вызове функций на языке Си из кода на языке Go при помощи cgo снижены примерно на 30%. В runtime на 64-разрядных платформах реализована рандомизация адресного пространства при запуске, что усложняет предсказание адресов в памяти при попытках эксплуатации уязвимостей в Си-коде, задействованном через cgo. Для отключения рандомизации предложена опция "GOEXPERIMENT=norandomizedheapbase64". Расширено число ситуаций, в которых компилятор выделяет память для слайсов в стеке, а не в куче, что положительно сказывается на производительности. Реализация команды "go fix" полностью переписана с использованием пакета analysis, предоставляющего функциональность для статистического анализа кода. Добавлена поддержка доступных в пакете modernize анализаторов, предлагающих правки для упрощения кода с учётом новых возможностей языка и стандартной библиотеки. Добавлен анализатор "inline" для inline-развёртывания всех вызовов функций, помеченных директивой "//go:fix inline". Добавлены новые пакеты crypto/hpke (реализация HPKE - Hybrid Public Key Encryption), crypto/mlkem/mlkemtest и testing/cryptotest. Добавлен экспериментальный пакет simd/archsimd, предоставляющий низкоуровневый доступ к выполнению векторных операций с использованием инструкций SIMD на системах с архитектурой AMD64. Добавлен экспериментальный пакет runtime/secret для безопасной очистки (обнуления) временной памяти, выделенной при выполнении указанной функции. В пакет runtime/pprof добавлен экспериментальный профиль goroutineleak для выявления утечек сопрограмм (goroutine).
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=64773