Роберт Гриземер, от имени команды Go.
1 февраля 2023 года.
Сегодня команда Go рада выпустить Go 1.20, который вы можете получить, посетив страницу загрузки.
Go 1.20 выиграла от расширенной фазы разработки, ставшей возможной благодаря более раннему широкому тестированию и улучшенной общей стабильности кодовой базы.
Мы особенно рады запустить предварительный просмотр profile-guided optimization (PGO), который позволяет компилятору выполнять оптимизацию, зависящую от приложения и рабочей нагрузки, на основе информации о профиле во время выполнения. Предоставление профиля для go build позволяет компилятору ускорить работу типичных приложений примерно на 3-4%, и мы ожидаем, что будущие версии получат еще больше преимуществ от PGO. Поскольку это предварительный выпуск поддержки PGO, мы рекомендуем пользователям попробовать его, но все еще есть неровности, которые могут помешать использованию в производстве.
Go 1.20 также включает в себя несколько языковых изменений, множество улучшений в инструментах и библиотеке, а также повышение общей производительности.
Языковые изменения
Ранее объявленному ограничению comparable теперь также удовлетворяют обычные сопоставимые типы, такие как интерфейсы, что упростит универсальный код.
Функции SliceData, String и StringData были добавлены в пакет unsafe. Они дополняют набор функций для независимой от реализации обработки фрагментов и строк.
Правила преобразования типов Go были расширены, чтобы разрешить прямое преобразование из фрагмента в массив.
Спецификация языка теперь определяет точный порядок, в котором сравниваются элементы массива и поля структуры. Это проясняет, что происходит в случае паники во время сравнений.
Усовершенствования инструментов
Инструмент cover теперь может собирать профили покрытия целых программ, а не только модульных тестов.
Инструмент go больше не полагается на предварительно скомпилированные архивы пакетов стандартной библиотеки в каталоге $GOROOT/pkg, и они больше не поставляются вместе с дистрибутивом, что приводит к уменьшению объема загрузок. Вместо этого пакеты в стандартной библиотеке создаются по мере необходимости и кэшируются в кэше сборки, как и другие пакеты.
Реализация go test -json была улучшена, чтобы сделать ее более надежной при наличии случайных записей в stdout.
Команды go build, go install и другие команды, связанные со сборкой, теперь принимают флаг -pgo, позволяющий оптимизировать с учетом профиля, а также флаг -cover для анализа покрытия всей программы.
Команда go теперь отключает cgo по умолчанию в системах без набора инструментов C. Следовательно, когда Go устанавливается в систему без компилятора C, она теперь будет использовать чистые сборки Go для пакетов в стандартной библиотеке, которые необязательно используют cgo, вместо использования предварительно распределенных архивов пакетов (которые были удалены, как отмечалось выше).
Инструмент проверки сообщает о большем количестве ошибок привязки переменных цикла, которые могут возникать в тестах, выполняемых параллельно.
Стандартные дополнения к библиотеке
Новый пакет crypto / ecdh обеспечивает явную поддержку обмена ключами Диффи-Хеллмана по эллиптической кривой поверх NIST curves и Curve25519.
Ошибки новой функции.Join возвращает ошибку, заключающую в себе список ошибок, которые могут быть получены снова, если тип ошибки реализует метод Unwrap() []error.
Новый тип http.ResponseController предоставляет доступ к расширенной функциональности для каждого запроса, не обрабатываемой интерфейсом http.ResponseWriter.
Прокси-сервер пересылки httputil.ReverseProxy включает в себя новую функцию перехвата перезаписи, заменяющую предыдущий перехват Director.
Новый контекст. Функция WithCancelCause предоставляет способ отменить контекст с заданной ошибкой. Эта ошибка может быть восстановлена путем вызова нового контекста. Функция причины.
Новые поля os/exec.Cmd Cancel и WaitDelay определяют поведение Cmd при отмене связанного с ним контекста или завершении процесса.
Улучшенная производительность
Усовершенствования компилятора и сборщика мусора позволили снизить нагрузку на память и повысить общую производительность процессора до 2%.
Работа, специально ориентированная на время компиляции, привела к улучшению сборки до 10%. Это возвращает скорость сборки в соответствие с Go 1.17.
При создании версии Go из исходного кода для Go 1.20 требуется версия Go 1.17.13 или новее. В будущем мы планируем продвигать набор инструментов bootstrap примерно раз в год. Кроме того, начиная с Go 1.21, некоторые старые операционные системы больше не будут поддерживаться: это включает Windows 7, 8, Server 2008 и Server 2012, macOS 10.13 High Sierra и 10.14 Mojave. С другой стороны, Go 1.20 добавляет экспериментальную поддержку FreeBSD на RISC-V.
Полный и более подробный список всех изменений смотрите в полных примечаниях к выпуску.
Спасибо всем, кто внес свой вклад в этот релиз, написав код, зарегистрировав ошибки, поделившись отзывами и протестировав кандидатов на выпуск. Ваши усилия помогли обеспечить максимальную стабильность Go 1.20. Как всегда, если вы заметили какие-либо проблемы, пожалуйста, сообщите о проблеме.
Наслаждайтесь Go 1.20!