Блог Go
Сегодня команда Go рада объявить о выходе Go 1.27. Вы можете найти бинарные архивы и установщики на странице загрузки.
Go 1.27 приносит важные улучшения в язык, набор инструментов, среду выполнения и стандартную библиотеку. Ниже приведены некоторые из основных нововведений.
Изменения в языке
Go 1.27 представляет три заметных обновления в спецификации языка.
Во-первых, теперь поддерживаются обобщенные методы. Например, см. math/rand/v2.Rand:
Во-вторых, ключом в литерале структуры теперь может быть любой допустимый селектор поля для типа структуры, что позволяет напрямую инициализировать поля во вложенных или внедренных структурах:
Наконец, вывод типов функций был обобщен для применения во всех контекстах присваивания. Обобщенные функции теперь можно использовать без явных аргументов типов в составных литералах, преобразованиях типов и отправках в каналы:
Улучшения инструментов
- go fix включает в себя несколько новых модернизаторов: atomictypes, embedlit, slicesbackward и unsafefuncs.
- go doc теперь поддерживает запросы формата package@version, такие как go doc example.com/pkg@v1.2.3.
- go mod tidy теперь автоматически объединяет несколько блоков require в go.mod в стандартную структуру из двух блоков (прямые и косвенные зависимости).
Производительность и среда выполнения
- Специализированная по размеру аллокация памяти снижает затраты на выделение мелких объектов (<80Б) на величину до 30%, улучшая общую производительность примерно на 1% для программ с интенсивным выделением памяти.
- Профиль goroutineleak в runtime/pprof теперь общедоступен, что позволяет автоматически обнаруживать постоянно заблокированные горутины.
Дополнения стандартной библиотеки
- encoding/json/v2 предоставляет высокоуровневую обработку JSON с настраиваемыми опциями и более строгими настройками по умолчанию, а также encoding/json/jsontext для низкоуровневой потоковой передачи. Существующий пакет encoding/json теперь работает на базе реализации v2 для более быстрого демаршалинга с сохранением обратной совместимости.
- crypto/mldsa реализует постквантовую схему цифровой подписи ML-DSA (FIPS 204), интегрированную в crypto/x509 и crypto/tls.
- uuid обеспечивает встроенную поддержку генерации и разбора UUID.
- simd и архитектурно-зависимый simd/archsimd предоставляют экспериментальную поддержку SIMD.
- net/http/httptest добавляет NewTestServer, предоставляя фиктивную сеть в памяти, подходящую для использования с пакетом testing/synctest.
Пожалуйста, ознакомьтесь с примечаниями к выпуску Go 1.27 для получения полного списка изменений и подробностей.
В течение следующих нескольких недель в последующих записях блога будут более подробно рассмотрены некоторые темы, относящиеся к Go 1.27. Загляните позже, чтобы прочитать эти статьи.
Спасибо всем, кто внес свой вклад в этот релиз, написав код, сообщив об ошибках, опробовав экспериментальные дополнения и протестировав кандидатские версии. Как всегда, если вы заметите какие-либо проблемы, пожалуйста, создайте тикет.
Мы надеемся, что вам понравится использовать Go 1.27!
