Найти тему

🚀 Что-то я упустил момент, а тем временем 1 февраля вышел релиз #Golang 1.20! 🥳


📝 Среди изменений в новом выпуске:

🔥 Добавили поддержку обертки нескольких ошибок. Теперь ошибка в golang может содержать в себе несколько других ошибок. Подробнее читайте в релиз ноуте. Но звучит как то, что больше не нужны сторонние библиотеки типа как от hashicorp. Смотрим на errors.Join

👉 Предоставлена экспериментальная поддержка оптимизации на основе результатов профилирования кода (PGO - Profile-guided optimization), позволяющей учитывать особенности, определяемые во время выполнения программы. Учёт профиля выполнения при сборке позволяет повысить производительность приложений на 3-4%. Для включения PGO в go build, go install и другие сборочные команды добавлена опция -pgo.

👉 В пакет unsafe добавлены функции SliceData, String и StringData для низкоуровневых манипуляций со срезами (массивы динамического размера) и строками (например, для преобразования области памяти, на которую ссылается указатель в строку с типом string и наоборот).

👉 Правила преобразования типов расширены возможностью прямого преобразования из среза (slice) в массив.

👉 В спецификации явно определён порядок сравнения элементов массива и полей структур.

👉 Утилита cover расширена возможностью построения coverage-профиля для всей программы, а не только unit-тестов. Для формирования coverage-профиля в go build, go install и другие сборочные команды добавлена опция -cover.

👉 Утилита go избавлена от привязки к размещаемым в каталоге $GOROOT/pkg заранее скомпилированным пакетам стандартной библиотеки, что позволило исключить их из поставки и добиться уменьшения размера загружаемых данных. Пакеты стандартной библиотеки, как и обычные пакеты, теперь собираются по мере необходимости и кэшируются в сборочном кэше.

👉 В команде go по умолчанию отключено применение пакета cgo на системах без инструментария для сборки кода на языке Си. На подобных системах теперь используются варианты пакетов стандартной библиотеки на языке Go, вместо использования предварительно скомпилированных пакетов.

👉 В утилите vet реализованы дополнительные предупреждения о проблемах с используемыми в циклах переменными, выявленными при параллельном запуске тестов.

👉 В стандартную библиотеку добавлен пакет crypto/ecdh с поддержкой обмена ключами на основе эллиптических кривых ECDH (Elliptic Curve Diffie-Hellmann).

👉 Добавлен новый тип http.ResponseController для создания расширенных обработчиков HTTP-ответов.

👉 В тип httputil.ReverseProxy добавлена функция Rewrite для изменения запроса.

👉 Добавлена функция context.WithCancelCause, позволяющая отменить вызов с указанием определённой ошибки.

👉 В тип os/exec.Cmd добавлены поля Cancel и WaitDelay, определяющие поведение при отмене контекста или завершении процесса.

👉 В компиляторе и сборщике мусора снижено потребление памяти и проведена оптимизация производительности (прирост скорости достигает 2%).

👉 Проведена работа по ускорению компиляции - сокращение времени сборки может достигать 10%.

👉 Добавлена экспериментальная поддержка платформы FreeBSD на системах с арихитектурой RISC-V (GOOS=freebsd, GOARCH=riscv64).

2 минуты