Вышел Go 1.20. Обзор под катом
Команда разработчиков Go представила Go 1.20. Загрузить его можно здесь.
Благодаря раннему обширному тестированию и повышенной общей стабильности кодовой базы была расширена фаза разработки — и это пошло на пользу Go 1.20. За подробностями приглашаем под кат, а за полезной теорией и практикой — на наш курс по Backend-разработке на Go.
Особенно радостно выпустить предварительную версию профильно-управляемой оптимизации (Profile-Guided Optimization, PGO). Она позволяет компилятору выполнять специфические для приложения оптимизации на основе информации о профиле времени выполнения. Учёт профиля в go build
позволяет компилятору повысить скорость выполнения приложения в среднем на 3–4%. Ма надеемся, что в будущих выпусках PGO станет ещё эффективнее. Поддержка PGO находится в предварительной стадии, поэтому смело экспериментируйте с ней, но учтите, что в ней есть проблемы, способные помешать применению PGO в продакшене.
В Go 1.20 включён ряд изменений языка, множество улучшений инструментов и библиотек, повышена общая производительность.
Изменения языка
Предопределённое ограничение сравнимости (comparable) теперь удовлетворяется обычными сравнимыми типами, такими, как интерфейсы. Это упрощает код.
Функции
SliceData
,String
иStringData
добавлены в пакетunsafe
. Они дополняют набор функций для низкоуровневых манипуляций со срезами (срезы также называют слайсами) и строками.Правила преобразования типов данных теперь допускают прямое преобразование слайса в массив.
Спецификация языка определяет точный порядок, по которому сравниваются элементы массива и поля структур. Это проясняет происходящее при панике во время сравнения.
Утилита
cover
теперь может собирать coverage-профили всей программы, а не только юнит-тестов.Утилита
go
больше не связана с предварительно скомпилированными пакетами стандартной библиотеки в папке$GOROOT/pkg
. Они исключены из дистрибутива, дистрибутив стал меньше. Теперь все пакеты собираются по мере необходимости и кешируются в кеше сборки.Надёжность
go test -json
повышена для случаев, когда вstdout
есть ошибочные символы.go build
,go install
и другие связанные со сборкой команды теперь принимают флаг профильно-управляемой оптимизации-pgo
, а также флаг-cover
для coverage-анализа всей программы.Команда
go
теперь по умолчанию отключаетcgo
на системах без инструментария сборки кода на С. Таким образом, на системах без компилятора C теперь используются варианты пакетов стандартной библиотеки на чистом Go с опциональным использованием cgo, а не предварительно скомпилированные пакеты, которые удалены из дистрибутива.Утилита
vet
выводит больше предупреждений о проблемах с переменными в циклах, которые возникают при параллельном запуске тестов.
Что добавлено в стандартную библиотеку
- Пакет
crypto/ecdh
поддерживает обмен ключами по протоколу Диффи-Хеллмана на эллиптических кривых c NIST-кривыми и Curve25519. - Функция
errors.Join
возвращает ошибку, в которую упакован список ошибок. Их можно получить, если тип ошибки содержит методUnwrap() []error
. - Тип
http.ResponseController
предоставляет доступ к расширенным обработчикам HTTP-ответов, которые не обрабатываются интерфейсомhttp.ResponseWriter
. - В перенаправляющий прокси
httputil.ReverseProxy
взамен хукаDirector
добавлена новая функцияRewrite
. - Функция
context.WithCancelCause
позволяет отменить вызов с указанием ошибки. Эту ошибку можно получить, вызвав новую функциюcontext.Cause
. - Поля
Cancel
иWaitDelay
вos/exec.Cmd
, определяющие поведениеCmd
при отмене связанногоContext
или завершении процесса.
Повышение производительности
- Компилятор и сборщик мусора потребляют меньше памяти, а повышение общей производительности ЦПУ может достигать 2%.
- Улучшена компиляция, а скорость сборки теперь снова как в Go 1.17; прирост скорости может составлять до 10%.
При сборке Go 1.20 из исходного кода требуется Go 1.17.13 или более новая версия, а инструментальную цепочку для бутстрэппинга мы планируем обновить в будущем. С версии Go 1.21 прекращается поддержка некоторых старых операционных систем, включая Windows 7, 8, Server 2008 и Server 2012, macOS 10.13 High Sierra и 10.14 Mojave, но добавлена экспериментальная поддержка FreeBSD на архитектуре RISC-V.
Полный подробный список всех изменений вы найдёте в тексте примечаний к выпуску.
Спасибо всем, кто помогал писать код, сообщал об ошибках, делился своими впечатлениями и тестировал релиз-кандидаты. С вашей помощью Go 1.20 стал намного лучше. И как обычно, если вы обнаружите ошибку, сообщите нам о ней.
Источник
Data Science и Machine Learning
Python, веб-разработка
Мобильная разработка
Java и C#
От основ — в глубину
А также