В выпуск новой версии языка программирования Go 1.20, который разрабатывается компанией Google при участии сообщества как гибридное решение, сочетающее в себе высокую производительность компилируемых языков.
Новая редакция Go 1.20 выиграл от расширенного этапа разработки, что стало возможным благодаря расширенному тестированию, описанному выше, и общей улучшенной стабильности кодовой базы.
Стоит отметить, что проект изначально разрабатывался с прицелом на многопоточное программирование и эффективную работу на многоядерных системах, включая предоставление реализованных на носителе средств для организации параллельных вычислений и взаимодействия между параллельно выполняемыми методами. Язык также обеспечивает встроенную защиту от переполнения выделенного блока памяти и предоставляет возможность использования сборщика мусора.
Синтаксис Go основан на знакомых элементах языка C с некоторыми заимствованиями из языка Oberon. Язык достаточно лаконичен, но код легко читается и понимается.
Go 1.20 основные новости
В представленной новой версии Go 1.20 подчеркивается, что она предоставилаo экспериментальная поддержка оптимизации по профилям (PGO), который учитывает характеристики, определяемые во время выполнения. С учетом профиля выполнения при сборке производительность приложений может быть улучшена на 3-4%. Добавлена опция "-pgo" для включения PGO в команды go build, go install и другие команды сборки.
Еще одна представленная новинка заключается в том, что добавлены функции SliceData, String и StringData в пакет unsafe для низкоуровневых манипуляций с сегментами (массивами динамического размера) и строками (например, для преобразования области памяти, на которую указывает указатель, в строку типа string и наоборот).
В дополнение к этому, также выделено, что покрытие, расширено возможностью сбора профилей для программ в целом, а не только для модульных тестов, также добавлена опция "-cover" для перехода к компиляции, установке и другим командам. построить для создания профиля покрытия.
утилита go освобождается от привязки к предварительно скомпилированным пакетам стандартной библиотеки расположенные в каталоге $GOROOT/pkg, что позволило исключить их из раздачи и добиться уменьшения размера загружаемых данных. Стандартные пакеты библиотек, как и обычные пакеты, теперь собираются по мере необходимости и кэшируются в кэше сборки.
Команда go по умолчанию отключает использование пакета cgo в системах без набора инструментов для компиляции кода C. Эти системы теперь используют варианты пакетов стандартной библиотеки на языке Go, а не используют предварительно скомпилированные пакеты.
Из другие изменения, которые выделяются новой версии:
- Утилита vet имеет дополнительные предупреждения о проблемах с переменными, используемыми в циклах, которые обнаруживаются при параллельном выполнении тестов.
- Правила преобразования типов расширены возможностью прямого преобразования из сегмента в массив.
- Спецификация явно определяет порядок, в котором сравниваются элементы массива и поля структуры.
- В стандартную библиотеку добавлен пакет crypto/ecdh с поддержкой обмена ключами ECDH (Elliptic Curve Diffie-Hellmann).
- Добавлен новый тип http.ResponseController для создания полнофункциональных контроллеров ответов HTTP.
- В тип httputil.ReverseProxy добавлена функция Rewrite для изменения запроса.
- Добавлена функция context.WithCancelCause, позволяющая отменить вызов при указанной ошибке.
- Поля Cancel и WaitDelay были добавлены в тип os/exec.Cmd для указания поведения при отмене контекста или завершении процесса.
- В компиляторе и сборщике мусора уменьшено потребление памяти и оптимизирована производительность (прирост скорости достигает 2%).
- Проделана работа по ускорению компиляции: сокращение времени компиляции может достигать 10%.
- Добавлена экспериментальная поддержка платформы FreeBSD на системах с архитектурой RISC-V (GOOS=freebsd, GOARCH=riscv64).
В конце концов Если вам интересно узнать об этом больше, вы можете проверить детали По следующей ссылке.