Випуск Go 1.27: нові можливості та оптимізації
Випуск Go 1.27: нові можливості та оптимізації
Команда Go випустила Go 1.27, останнє велике оновлення популярної мови програмування з відкритим кодом, через шість місяців після Go 1.26. Як завжди, новий випуск дотримується обіцянки сумісності з Go 1, тому майже всі існуючі програми Go повинні компілюватись і працювати без змін.
Підтримка загальних методів у Go 1.27
Серед найзначніших змін на рівні мови в Go 1.27 — підтримка загальних методів. Тепер оголошення методів можуть вводити власні параметри типу, що дозволяє загальним функціям жити безпосередньо в просторові імен конкретного типу даних без потреби в оголошенні загальної функції на рівні пакету.
Оптимізації в runtime і бібліотеці
Go 1.27 також пропонує помітну оптимізацію runtime. Тепер компілятор генерує виклики до спеціалізованих процедур виділення пам’яті, знижуючи витрати на деякі алокації пам’яті менше 80 байт до 30%. Конкретна вигода залежить від робочого навантаження, а команда Go оцінює загальне поліпшення приблизно на 1% в реальних додатках з великою алокацією пам’яті.
Ще одне покращення runtime — загальна доступність профілю goroutineleak, який спочатку з’явився в експериментальному режимі в Go 1.26. Він доступний через runtime/pprof і /debug/pprof/goroutineleak HTTP кінець, призначений для ідентифікації goroutines, які постійно блокуються на примітивних синхронізаціях, таких як канали, м’ютекси та змінні умов.
Зміни в стандартній бібліотеці
Стандартна бібліотека отримує одне з найбільших змін з впровадженням encoding/json/v2 та encoding/json/jsontext. Перший є суттєвим переглядом існуючого пакету JSON у Go, тоді як jsontext забезпечує нижчий рівень синтаксичного оброблення JSON через кодувальники та декодувальники, що працюють з токенами та значеннями.
JSON v2 приймає суворіші параметри за умовчанням, відхиляючи недійсні UTF-8 стрічки та дублікат імен членів об’єктів. Важливо, що існуючі програми не зобов’язані переходити на новий API. Звичний пакет encoding/json залишається підтримуваним, але тепер підкріплений реалізацією v2, зберігаючи свою наявну поведінку маршалінгу та антимаршалінгу.
Нові пакети та поліпшення безпеки
Щодо криптографії, новий пакет crypto/mldsa реалізує схему цифрового підпису ML-DSA, стандартизовану у FIPS 204. Одночасно crypto/x509 отримує підтримку публічних ключів, приватних ключів ML-DSA та підписів, тоді як TLS 1.3 тепер може використовувати підписи ML-DSA через нові схеми підпису MLDSA44, MLDSA65 та MLDSA87.
Go 1.27 також впроваджує новий пакет uuid у стандартній бібліотеці для генерації та розбору UUID, зменшуючи потребу в зовнішній залежності для цього поширеного завдання.
Оптимізації продуктивності та командні інструменти
На стороні продуктивності новий випуск представляє експериментальний пакет simd, котрий забезпечує портативні, векторно-незалежні SIMD операції. Коли система це підтримує, використовується апаратне векторне інструкцію, одночасно відкриваючи портативні векторні типи, такі як Int8s і Float32s. Ця функція є опціональною і повинна бути включена під час побудови за допомогою GOEXPERIMENT=simd.
Випуск також приносить багато поліпшень у командних інструментах Go. Тепер go test за замовчуванням запускає перевірку stdversion vet, що допомагає виявляти використання API стандартної бібліотеки, новіших за версію Go, оголошену модулем.
Для проектів, які використовують Go 1.27 або новішу версію, go mod tidy тепер автоматично консолідує дублікат секцій require максимум у два блоки (один для прямих залежностей і один для непрямих), зберігаючи коментарі. Додаткові модернізації також були реалізовані в go fix.
HTTP стек отримує кілька вдосконалень: HTTP/2 сервер Go тепер може враховувати сигнали пріоритету клієнтів RFC 9218, тоді як тіла відповідей HTTP/1 автоматично відводять обмежену кількість непрочитаних даних, коли закриваються, щоб покращити повторне використання з’єднань. Сервери також можуть використовувати нове поле MaxHeaderValueCount для обмеження кількості прийнятих значень заголовків.
Підтримка Unicode та системні вимоги
Підтримка Unicode підвищилася з Unicode 15 до Unicode 17, охоплюючи зміни, введені в обох версіях Unicode 16 та 17.
Нарешті, змінюються системні вимоги для користувачів macOS. Як було оголошено раніше, Go 1.27 тепер вимагає macOS 13 Ventura або новішу версію. У порті PowerPC на Linux підключається інструментарій для ELFv2 ABI та додає підтримку cgo, незалежних від позиції виконуваних файлів та зовнішнього лінкування.
Для отримання додаткової інформації відвідайте офіційне оголошення або перегляньте ноти релізу.




