A Go egy párhuzamos, lefordított programozási nyelv statikus gépeléssel, amelyet a C szintaxis ihletett.
A Go 1.22 új verziója hat hónappal az 1.21-es verzió után érkezik, számos figyelemre méltó változtatással az eszközkészletben, a futási környezetben, optimalizálási fejlesztésekben, fordítóprogram-fejlesztésekben és könyvtárakban.
Azoknak, akik nem ismerik a Go-t, meg kell említenem, hogy ez egy programozási nyelv, amelyet a Google fejleszt közösség részvételével hibrid megoldásként, és amely a fordított nyelvek nagy teljesítményét olyan előnyökkel ötvözi, mint a szkriptnyelvek, mint a kódírás egyszerűsége, a fejlesztési sebesség és a hibavédelem.
A Go 1.22 fő újdonságai
Ebben az új verzióban, amelyet a Go 1.22-ben vezettek be, két változás emelkedik ki a "for" ciklusokban . Korábban a "for" ciklus által deklarált változók egyszer jöttek létre , és minden iterációban frissültek. A Go 1.22-ben a ciklus minden iterációja új változókat hoz létre a véletlen megosztási hibák elkerülése érdekében. Ezenkívül kísérleti támogatást (GOEXPERIMENT=rangefunc) adtak a "for" ciklusokban lévő tartományfüggvényekhez, amely lehetővé tette egy függvény iterátorként való megadását. A "for" ciklusokkal régóta fennálló problémát, amely miatt a korutinhívások ciklusváltozókat osztottak meg az iterációk között, szintén megoldották . Továbbá a "for" ciklusok mostantól egész számokon is iterálhatnak. Például:
csomag fő import "fmt" func main() { for i := range 10 { fmt.Println(10 - i) } fmt.Println("go1.22 felszáll!") }
Egy másik figyelemre méltó változás ebben az új verzióban a munkaterület függőségeit tartalmazó " vendor " könyvtár használatának lehetősége. A parancsok mostantól használhatják ezt a könyvtárat, amely a ` go work vendor` paranccsal jön létre , és a build parancsokban használatos, amikor a ` -mod` kapcsoló " vendor " értékre van állítva, ami az alapértelmezett érték, ha a " vendor " könyvtár létezik a munkaterületen.
Fontos megjegyezni, hogy a ` go get` funkció már nem támogatott a korábbi GOPATH módú modulokon kívül. Más építési parancsok, mint például a `go build` és a `go test` azonban továbbra is határozatlan ideig működni fognak a korábbi GOPATH programok esetében. Ezenkívül a `go mod init` parancs már nem próbálja meg importálni a modulkövetelményeket más gyártói eszközök konfigurációs fájljaiból (például a Gopkg.lock).
A Go 1.22-es verzió egy új io/unsafe csomagot vezet be , amely funkciókat biztosít a mutatókkal és a nem biztonságos memóriával való munkához . Ez a csomag metódusokat kínál a mutatók biztonságos típusról nem biztonságos típusra konvertálására, valamint memória-másolási műveletek végrehajtására határok ellenőrzése nélkül.
Folytatódott a munka a fordítóprogram optimalizálásának beépítésére a PGO kódprofilozás eredményei alapján . A fordítóprogram most devirtualizációs eszközöket használ a különféle metódusokból érkező közvetett hívások kibővített inline blokkok végrehajtásával való helyettesítésére . A PGO engedélyezésekor ez a változás a legtöbb program teljesítményét 2% és 14% közötti mértékben javította.
A Go Windows-verziójában a -buildmode=c-archive vagy -buildmode=c-shared kapcsolóval létrehozott Go könyvtárakra mutató vagy azokat betöltő programok mostantól használhatják a Windows eseménynaplózási (ETW) API-t az új runtime/trace és tracehook csomagokon keresztül , amelyek ETW-szolgáltatóként valósítják meg a Go eseménynyomkövetési gyűjtési protokollt.
A többi kiemelkedő változás közül:
- A parancs menj teszt -borító most lefedettségi összefoglalókat nyomtat a lefedett csomagokhoz, amelyek nem rendelkeznek saját tesztfájllal.
- os/exec, hozzáadásra került a környezeti attribútumok meghatározásának képessége, amely lehetővé teszi olyan értékek beállítását, mint a munkakönyvtár, a környezeti változók és a végrehajtott parancsok bemeneti/kimeneti fájlleírója.
- Optimalizált memóriakezelés futás közben, ami 1-3%-os teljesítménynövekedést és 1%-os memóriafogyasztás-csökkenést eredményez a legtöbb alkalmazásnál.
- El paquete net/http, a funkció hozzáadásra került CloseIdleConnections a HTTP-ügyfélhez, amely bezárja az összes tétlen kapcsolatot, amelyet az ügyfél nemrég használt
- A fordítóhoz a hívásbeillesztési mechanizmus továbbfejlesztett kísérleti megvalósítása (GOEXPERIMENT=newliner) került, amely heurisztikák segítségével választja el a fontos műveleteket a nem fontosaktól.
- A csomag hozzáadva » math/rand/v2 » a szabványos könyvtárba, amely konzisztensebb API-t kínál, és gyorsabb algoritmusokat használ az álvéletlen számok generálására.
- El paquete net/http.ServeMux Hozzáadtuk a módszerek és maszkok megadásának lehetőségét a sablonokban.
Végül, ha további részletekre vagy kíváncsi, a következő linken megtalálod a részleteket .