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 (ETW) чрез новите пакети runtime/trace и tracehook , които имплементират протокола за събиране на следи от събития на Go като доставчик на ETW.

От останалите промени, които се открояват:

  • Командата отидете тест -покрийте сега отпечатва обобщения на покритието за обхванати пакети, които нямат собствени тестови файлове.
  • os/изп, е добавена възможност за дефиниране на контекстни атрибути, което ви позволява да задавате стойности като работна директория, променливи на средата и дескриптор на входно/изходен файл за изпълнени команди.
  • Оптимизирано управление на паметта по време на изпълнение, което води до 1-3% увеличение на производителността и 1% намаление на потреблението на памет за повечето приложения.
  • пакет net/http, функцията е добавена CloseIdleConnections към HTTP клиента, който затваря всички неактивни връзки, които клиентът е използвал наскоро
  • Към компилатора е добавено подобрено експериментално изпълнение (GOEXPERIMENT=newinliner) на механизма за вмъкване на повикване, което използва евристика за отделяне на важни операции от неважни.
  • Пакетът е добавен » math/rand/v2 » към стандартната библиотека, която предлага по-последователен API и използва по-бързи алгоритми за генериране на псевдослучайни числа.
  • пакет net/http.ServeMux Добавена е възможност за указване на методи и маски в шаблони.

И накрая, ако се интересувате да научите повече, можете да намерите подробностите на следния линк.


Добавяне като предпочитан източник в Google