Go 1.22 har redan släppts, lär dig mer om dess nya funktioner och förbättringar

goland

Go är ett samtidigt, kompilerat programmeringsspråk med statisk typning inspirerad av C-syntax.

Den nya versionen av Go 1.22 kommer sex månader efter version 1.21, med ett antal anmärkningsvärda förändringar av verktygsuppsättningen, körtiden, optimeringsförbättringar, kompilatorförbättringar och bibliotek.

För er som inte känner till Go bör jag nämna att det är ett programmeringsspråk som utvecklas av Google med deltagande från communityn, som en hybridlösning. Den kombinerar kompilerade språkens höga prestanda med fördelar som skriptspråk, som enkel kodskrivning, utvecklingshastighet och felskydd.

Gå 1.22 huvudnyheter

I den här nya versionen, som introducerades från och med Go 1.22, sticker två ändringar av "for"-loopar ut . Tidigare skapades variabler som deklarerades av en "for"-loop en gång och uppdaterades vid varje iteration. I Go 1.22 skapar varje iteration av loopen nya variabler för att förhindra oavsiktliga delningsfel. Dessutom lades experimentellt stöd (GOEXPERIMENT=rangefunc) för range-funktioner i "for"-loopar till, vilket gör att en funktion kan specificeras som en iterator. Ett långvarigt problem med "for"-loopar som orsakade att coroutine-anrop delade loopvariabler mellan iterationer löstes också . Dessutom kan "for"-loopar nu iterera över heltal. Till exempel:

paketets huvudimport "fmt" func main() { for i := range 10 { fmt.Println(10 - i) } fmt.Println("go1.22 tar fart!") }

En annan anmärkningsvärd förändring i den här nya versionen är introduktionen av möjligheten att använda en " vendor " -katalog som innehåller arbetsyteberoenden. Kommandon kan nu använda den här katalogen, som skapas med ` go work vendor` och används i byggkommandon när ` -mod` är satt till " vendor ", vilket är standardvärdet när en " vendor "-katalog finns i arbetsytan.

Det är viktigt att notera att funktionen ` go get` inte längre stöds utanför en modul i äldre GOPATH- läge. Andra byggkommandon som `go build` och `go test` kommer dock att fortsätta fungera på obestämd tid för äldre GOPATH-program. Dessutom kommer kommandot `go mod init` inte längre att försöka importera modulkrav från konfigurationsfiler från andra leverantörsverktyg (som Gopkg.lock).

Go 1.22 introducerar ett nytt io/unsafe -paket som tillhandahåller funktionalitet för att arbeta med pekare och osäkert minne . Detta paket erbjuder metoder för att konvertera pekare från säkra till osäkra typer, samt för att utföra minneskopieringsoperationer utan att kontrollera gränser.

Arbetet med att införliva kompilatoroptimeringar baserade på resultaten av PGO-kodprofilering fortsatte. Kompilatorn använder nu avvirtualiseringsverktyg för att ersätta indirekta anrop från olika metoder med exekvering av utökade inline-block. När PGO aktiverades förbättrade denna förändring prestandan för de flesta program med mellan 2 % och 14 %.

I Windows-versionen av Go kan program som länkar till eller laddar Go-bibliotek byggda med -buildmode=c-archive eller -buildmode=c-shared nu använda Windows Event Logging (ETW) API genom de nya runtime/trace- och tracehook- paketen , som implementerar Go-protokollet för insamling av händelsespårning som en ETW-leverantör.

Av de andra förändringarna som sticker ut:

  • Kommandot gå test -omslag skriver nu ut täckningssammanfattningar för täckta paket som inte har sina egna testfiler.
  • os/exec, möjligheten att definiera kontextattribut har lagts till, vilket gör att du kan ställa in värden som arbetskatalogen, miljövariabler och in-/utdatafilbeskrivning för körda kommandon.
  • Optimerad minneshantering under körning, vilket resulterar i en 1-3 % prestandaökning och en 1 % minskning av minnesförbrukningen för de flesta applikationer.
  • El paquete net/http, funktionen har lagts till CloseIdleConnections till HTTP-klienten, som stänger alla lediga anslutningar som klienten nyligen har använt
  • En förbättrad experimentell implementering (GOEXPERIMENT=newinliner) av anropsinfogningsmekanismen har lagts till kompilatorn, som använder heuristik för att separera viktiga operationer från icke-viktiga.
  • Paketet har lagts till » matematik/rand/v2 » till standardbiblioteket, som erbjuder ett mer konsekvent API och använder snabbare algoritmer för att generera pseudoslumptal.
  • El paquete net/http.ServeMux Lade till möjligheten att specificera metoder och masker i mallar.

Slutligen, om du är intresserad av att lära dig mer, kan du hitta detaljerna på följande länk.


Lägg till som prioriterad källa i Google