Блог Go
Сегодня команда Go рада объявить о выходе Go 1.27. Бинарные архивы и установщики можно найти на странице загрузки.
Go 1.27 привносит крупные улучшения в язык, набор инструментов, среду выполнения и стандартную библиотеку. Ниже приведены некоторые из ключевых новшеств.
Изменения в языке
Go 1.27 представляет три заметных обновления в спецификации языка.
Во-первых, теперь поддерживаются обобщенные (generic) методы. Пример можно увидеть в 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 в стандартную структуру из двух блоков (direct и indirect).
Производительность и среда выполнения
- Специализированная по размеру аллокация памяти снижает затраты на выделение мелких объектов (<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!
