Go 1.22 уже вышел, узнайте о его новых функциях и улучшениях

Голанд

Go — параллельный скомпилированный язык программирования со статической типизацией, вдохновленный синтаксисом C.

Новая версия Go 1.22 вышла через шесть месяцев после версии 1.21 и содержит ряд существенных изменений в наборе инструментов, среде выполнения, улучшениях оптимизации, усовершенствованиях компилятора и библиотеках.

Для тех, кто не знаком с Go, следует упомянуть, что это язык программирования, разрабатываемый Google с участием сообщества в качестве гибридного решения, сочетающего высокую производительность компилируемых языков с преимуществами скриптовых языков, такими как простота написания кода, скорость разработки и защита от ошибок.

Go 1.22 основные новости

В этой новой версии, появившейся в Go 1.22, выделяются два изменения в циклах «for» . Ранее переменные, объявленные в цикле «for», создавались один раз и обновлялись на каждой итерации. В Go 1.22 каждая итерация цикла создает новые переменные , чтобы предотвратить случайные ошибки совместного использования. Кроме того , добавлена ​​экспериментальная поддержка (GOEXPERIMENT=rangefunc) для функций диапазона в циклах «for», позволяющая указывать функцию в качестве итератора. Также решена давняя проблема с циклами «for», из-за которой вызовы сопрограмм приводили к совместному использованию переменных цикла между итерациями . Более того, циклы «for» теперь могут итерировать по целым числам. Например:

package main import "fmt" func main() { for i := range 10 { fmt.Println(10 - i) } fmt.Println("go1.22 взлетает!") }

Еще одно важное изменение в этой новой версии — это возможность использования каталога " vendor " , содержащего зависимости рабочей области. Теперь команды могут использовать этот каталог, который создается с помощью команды ` go work vendor` и используется в командах сборки, когда параметр ` -mod` установлен на " vendor ", что является значением по умолчанию, если в рабочей области существует каталог " vendor ".

Важно отметить, что функциональность ` go get` больше не поддерживается вне модулей в устаревшем режиме GOPATH . Однако другие команды сборки, такие как `go build` и `go test`, будут продолжать работать неограниченно долго для программ, использующих устаревший режим GOPATH. Кроме того, команда `go mod init` больше не будет пытаться импортировать требования модулей из конфигурационных файлов других инструментов сторонних поставщиков (например, Gopkg.lock).

В Go 1.22 представлен новый пакет io/unsafe , предоставляющий функциональность для работы с указателями и небезопасной памятью . Этот пакет предлагает методы для преобразования указателей из безопасных типов в небезопасные, а также для выполнения операций копирования памяти без проверки границ.

Работа над оптимизацией компилятора продолжалась на основе результатов профилирования кода с помощью PGO. Теперь компилятор использует инструменты девиртуализации для замены косвенных вызовов из различных методов выполнением расширенных встроенных блоков. После включения PGO это изменение улучшило производительность большинства программ на 2–14%.

В версии Go для Windows программы, которые подключаются к библиотекам Go, собранным с параметрами -buildmode=c-archive или -buildmode=c-shared, или загружают их , теперь могут использовать API Windows Event Logging (ETW) через новые пакеты runtime/trace и tracehook , которые реализуют протокол сбора трассировки событий Go в качестве поставщика ETW.

Из других изменений, которые выделяются:

  • Команда пойти проверить - обложка теперь печатает сводные данные о покрытии для покрываемых пакетов, у которых нет собственных тестовых файлов.
  • os / execдобавлена ​​возможность определять атрибуты контекста, позволяющие задавать такие значения, как рабочий каталог, переменные среды и дескриптор файла ввода/вывода для выполняемых команд.
  • Оптимизированное управление памятью во время выполнения, что приводит к увеличению производительности на 1–3 % и снижению потребления памяти на 1 % для большинства приложений.
  • Эль Пакет net / http, функция добавлена ЗакрытьIdleConnections к HTTP-клиенту, который закрывает все простаивающие соединения, которые клиент недавно использовал
  • В компилятор добавлена ​​улучшенная экспериментальная реализация (GOEXPERIMENT=newinliner) механизма вставки вызовов, использующая эвристику для отделения важных операций от неважных.
  • Пакет добавлен » математика/ранд/v2 » в стандартную библиотеку, которая предлагает более согласованный API и использует более быстрые алгоритмы для генерации псевдослучайных чисел.
  • Эль Пакет сеть/http.ServeMux Добавлена ​​возможность указывать методы и маски в шаблонах.

Наконец, если вас интересует более подробная информация, вы можете найти ее по следующей ссылке.


Добавить в качестве предпочтительного источника в Google