Go 1.20, производственный релиз созданного Google языка с открытым исходным кодом, который славится своей простотой, параллельностью и возможностями функционального программирования, был представлен с предварительным просмотром оптимизации с управлением по профилю (PGO) для компилятора. Go 1.20 можно загрузить с официального сайта go.dev.
Благодаря предварительной версии PGO в Go 1.20 инструментарий компилятора может выполнять оптимизацию, специфичную для приложения и рабочей нагрузки, в зависимости от информации о профиле выполнения. Текущий компилятор поддерживает профили процессора pprof, которые можно собрать с помощью пакетов runtime/pprof или net/http/pprof.
Также известная как оптимизация с обратной связью, PGO включает в себя передачу данных профиля из репрезентативных запусков приложения обратно в компилятор для следующей сборки приложения. Используя эту информацию, компилятор может принимать более обоснованные решения по оптимизации. Бенчмарки для репрезентативного набора программ Go показывают, что включение оптимизации встраивания PGO увеличивает производительность примерно на 3-4%. Ожидается, что в будущих выпусках появится больше оптимизаций PGO.
Наряду с введением PGO, Go 1.20 также привносит четыре изменения в язык. Во-первых, возможность преобразования среза в указатель массива, появившаяся в Go 1.17 в 2021 году, теперь распространяется на преобразование среза в массив. Во-вторых, пакет unsafe включает три новые функции: SliceData, String и StringData. Эти функции предоставляют полную возможность конструировать и деконструировать значения срезов и строк, независимо от их точного представления.
В-третьих, спецификация теперь устанавливает, что значения struct сравниваются по одному полю за раз, принимая во внимание поля в порядке их появления в определении типа struct, и останавливаясь на первом несоответствии. В-четвертых, сравнимые типы, такие как обычные интерфейсы, могут удовлетворять сравнимым ограничениям, даже если аргументы типа не являются строго сравнимыми. Это дает возможность инстанцировать параметр типа, ограниченный сравнимыми ограничениями, с аргументом не строго сравнимого типа, например, интерфейсного типа или составного типа, содержащего интерфейсный тип.
В дополнение к этим изменениям языка, Go 1.20 поставляется с различными другими улучшениями, такими как поддержка сбора профилей покрытия кода для программ, включая приложения и интеграционные тесты. В каталоге $GOROOT/pkg больше не хранятся прекомпилированные пакеты для стандартной библиотеки, что уменьшает размер дистрибутива Go и позволяет избежать перекоса инструментальной цепочки C для пакетов cgo. Кроме того, реализация go test -json была усилена для повышения надежности, а команда go version -m теперь читает более широкий спектр двоичных файлов Go, включая DLL-библиотеки Windows и двоичные файлы Linux без разрешения execute.
Go 1.20 также предоставляет экспериментальную поддержку FreeBSD на RISC-V и отключает cgo по умолчанию на системах без инструментария C. Однако Go 1.20 станет последним выпуском, поддерживающим macOS 10.13 High Sierra и 10.14 Mojave, а для Go 1.21 потребуется macOS 10.15 Catalina или более поздняя версия.
No-code Такая платформа, как AppMaster.io, может извлечь большую пользу от внедрения новых оптимизированных языков, таких как Go 1.20. Интегрируя такие мощные инструменты для веб-, мобильных и внутренних приложений, предприятия могут добиться значительных улучшений в производительности, пользовательском опыте и масштабируемости. Узнайте больше о разработке приложенийno-code и low-code , чтобы оставаться впереди технологической кривой.