Go 1.22 tashmë është lëshuar, mësoni për veçoritë dhe përmirësimet e tij të reja

goland

Go është një gjuhë programimi e përpiluar njëkohësisht me shtypje statike e frymëzuar nga sintaksa C.

Versioni i ri i Go 1.22 vjen gjashtë muaj pas versionit 1.21, me një numër ndryshimesh të dukshme në mjetet, kohën e ekzekutimit, përmirësimet e optimizimit, përmirësimet e përpiluesit dhe bibliotekat.

Për ata që nuk janë të njohur me Go, duhet të përmend se është një gjuhë programimi që po zhvillohet nga Google me pjesëmarrjen e komunitetit si një zgjidhje hibride që kombinon performancën e lartë të gjuhëve të kompajluara me avantazhe të tilla si gjuhët e skriptimit, si lehtësia e shkrimit të kodit, shpejtësia e zhvillimit dhe mbrojtja nga gabimet.

Karakteristikat kryesore të reja të Go 1.22

Në këtë version të ri, të prezantuar nga Go 1.22, dallohen dy ndryshime në ciklet "for" . Më parë, variablat e deklaruara nga një cikël "for" krijoheshin një herë dhe përditësoheshin në çdo përsëritje. Në Go 1.22, çdo përsëritje e cikës krijon variabla të reja për të parandaluar gabimet aksidentale të ndarjes. Përveç kësaj , u shtua mbështetja eksperimentale (GOEXPERIMENT=rangefunc) për funksionet e diapazonit në ciklet "for", duke lejuar që një funksion të specifikohet si një iterator. Një problem i gjatë me ciklet "for" që shkaktonte thirrjet korutinike për të ndarë variablat e cikleve midis përsëritjeve u zgjidh gjithashtu . Për më tepër, ciklet "for" tani mund të përsëriten mbi numra të plotë. Për shembull:

importi kryesor i paketës "fmt" func main() { for i := varg 10 { fmt.Println(10 - i) } fmt.Println("go1.22 nis!") }

Një tjetër ndryshim i dukshëm në këtë version të ri është futja e mundësisë për të përdorur një direktori " vendor " që përmban varësi të hapësirës së punës. Komandat tani mund ta përdorin këtë direktori, e cila krijohet me ` go work vendor` dhe përdoret në komandat e ndërtimit kur ` -mod` është vendosur në " vendor ", që është vlera parazgjedhur kur ekziston një direktori " vendor " në hapësirën e punës.

Është e rëndësishme të theksohet se funksionaliteti ` go get` nuk mbështetet më jashtë një moduli në modalitetin GOPATH të trashëguar . Megjithatë, komandat e tjera të ndërtimit si `go build` dhe `go test` do të vazhdojnë të funksionojnë për një kohë të pacaktuar për programet GOPATH të trashëguara. Përveç kësaj, komanda `go mod init` nuk do të përpiqet më të importojë kërkesat e modulit nga skedarët e konfigurimit të mjeteve të tjera të shitësit (siç është Gopkg.lock).

Go 1.22 prezanton një paketë të re io/unsafe që ofron funksionalitet për të punuar me pointerë dhe memorie të pasigurt . Kjo paketë ofron metoda për konvertimin e pointerëve nga lloje të sigurta në lloje të pasigurta, si dhe për kryerjen e operacioneve të kopjimit të memories pa kontrolluar kufijtë.

Puna vazhdoi për të përfshirë optimizimet e përpiluesit bazuar në rezultatet e profilizimit të kodit PGO. Përpiluesi tani përdor mjete devirtualizimi për të zëvendësuar thirrjet indirekte nga metoda të ndryshme me ekzekutimin e blloqeve të zgjeruara brenda rreshtit. Kur PGO u aktivizua, ky ndryshim përmirësoi performancën e shumicës së programeve me midis 2% dhe 14%.

versionin për Windows të Go, programet që lidhen me ose ngarkojnë bibliotekat Go të ndërtuara me -buildmode=c-archive ose -buildmode=c-shared tani mund të përdorin API-në e Regjistrimit të Ngjarjeve të Windows (ETW) përmes paketave të reja runtime/trace dhe tracehook , të cilat zbatojnë protokollin e mbledhjes së gjurmëve të ngjarjeve Go si një ofrues ETW.

Nga ndryshimet e tjera që bien në sy:

  • Komanda shkoj test -mbulesë tani printon përmbledhjet e mbulimit për paketat e mbuluara që nuk kanë skedarët e tyre të testimit.
  • os/exec, është shtuar aftësia për të përcaktuar atributet e kontekstit, duke ju lejuar të vendosni vlera të tilla si drejtoria e punës, variablat e mjedisit dhe përshkruesi i skedarit hyrës/dalës për komandat e ekzekutuara.
  • Menaxhimi i optimizuar i memories në kohën e ekzekutimit, duke rezultuar në një rritje të performancës 1-3% dhe një reduktim 1% të konsumit të memories për shumicën e aplikacioneve.
  • El paquete net/http, funksioni është shtuar CloseIdleConnections te klienti HTTP, i cili mbyll të gjitha lidhjet boshe që klienti ka përdorur së fundi
  • Një zbatim eksperimental i përmirësuar (GOEXPERIMENT=newinliner) i mekanizmit të futjes së thirrjeve është shtuar në përpilues, i cili përdor heuristikat për të ndarë operacionet e rëndësishme nga ato jo të rëndësishme.
  • Paketa është shtuar » matematikë/randë/v2 » në bibliotekën standarde, e cila ofron një API më të qëndrueshme dhe përdor algoritme më të shpejta për të gjeneruar numra pseudorandom.
  • El paquete net/http.ServeMux U shtua aftësia për të specifikuar metoda dhe maska ​​në shabllone.

Së fundmi, nëse jeni të interesuar të mësoni më shumë, mund t'i gjeni detajet në lidhjen e mëposhtme.


Shto si burim të preferuar në Google