24.6 C
Sevastopol
20 августа, 2026
СЕВОБОРОНА
Технологии

Вышла новая версия Go — 1.27

Вышла новая версия Go — 1.27

19 августа 2026 года команда разработки языка Go официально представила Go 1.27. Судя по количеству изменений, релиз получился одним из самых насыщенных за последние годы — обновления коснулись синтаксиса языка, компилятора, стандартной библиотеки и набора инструментов. Ниже — то, что стоит знать в первую очередь.

Дженерик‑методы

Главное изменение в самом языке — теперь методы могут иметь собственные типовые параметры, а не только функции пакета. Раньше, если нужен был универсальный (generic) метод для конкретного типа, приходилось выносить его на уровень пакета и терять привязку к объекту. Теперь такой код можно писать напрямую как метод. Наглядный пример из стандартной библиотеки — пакет math/rand/v2, где раньше для каждого целочисленного типа существовал свой метод (Int32N, Int64N, IntN и так далее), а теперь их заменяет один обобщённый метод N.

Более гибкие структурные литералы

Ключом в структурном литерале теперь может быть не только имя поля верхнего уровня, а любой корректный селектор поля — это удобно, когда нужно проинициализировать поле вложенной или встроенной структуры напрямую, без промежуточных конструкций. Заодно расширили и вывод типов для функций — он теперь работает в любых контекстах, где generic‑функция присваивается переменной подходящего функционального типа.

Новый движок JSON

В стандартную библиотеку добавлены пакеты encoding/json/v2 и encoding/json/jsontext — по сути, переработанная с нуля работа с JSON. Новая версия строже относится к данным (например, не пропускает невалидный UTF-8 и дублирующиеся ключи в объектах) и заметно быстрее на распаковке (unmarshal). Важный момент: старый пакет encoding/json теперь работает поверх новой реализации, но его API и поведение сохранены — мигрировать никто не обязывает, а старое поведение всегда можно вернуть через опции.

Постквантовая криптография

Добавлен пакет crypto/mldsa с реализацией схемы подписи ML‑DSA (FIPS 204) — это один из алгоритмов, устойчивых к атакам на квантовых компьютерах. Поддержка дотянулась и до crypto/x509 (сертификаты и ключи ML‑DSA), и до crypto/tls, где в TLS 1.3 появились схемы подписи MLDSA44, MLDSA65 и MLDSA87. Заодно в TLS добавили обмен ключами MLKEM1024.

SIMD из коробки (пока экспериментально)

Го исторически обходился без встроенной поддержки SIMD‑инструкций, и вот появился экспериментальный пакет simd — переносимый, не завязанный на конкретный размер вектора и конкретную архитектуру. Рядом развивается более низкоуровневый simd/archsimd, который в этом релизе получил обновлённое API для amd64 и поддержку arm64 (Neon) и WebAssembly. Включаются оба флагом GOEXPERIMENT=simd при сборке.

Что ещё заметно

  • Ускорение аллокаций памяти. Компилятор теперь генерирует специализированные под размер объекта вызовы аллокатора — мелкие выделения (до 80 байт) стали быстрее до 30%, а в реальных программах с активным выделением памяти обещают в среднем около 1% прироста.

  • Диагностика утечек горутин. Профиль goroutineleak, который был экспериментом в Go 1.26, стал стандартной частью runtime/pprof и доступен через /debug/pprof/goroutineleak.

  • Новый пакет uuid — генерация и разбор UUID теперь есть прямо в стандартной библиотеке, без сторонних зависимостей.

  • Инструменты стали удобнее. go doc научился работать с синтаксисом package@version, go mod tidy сам приводит go.mod к аккуратной структуре из двух блоков require, а go fix пополнился новыми модернизаторами кода.

  • Юникод обновлён с версии 15 до версии 17.

Полный список изменений — в официальных релизных заметках, а объявление о релизе можно почитать в блоге команды Go.

Источник