Go 1.24 kiadási áttekintés: Swiss Table Maps, ML-KEM, os.Root és testing/synctest

Go 1.24 jelentős kiadássá válik, amely a teljesítmény, a biztonság és a fejlesztői élmény javítására összpontosító fejlesztések sorát vezeti be. Ezek a változtatások célja, hogy a Go még hatékonyabbá és erősebbé váljon modern alkalmazások fejlesztéséhez.
Teljesítménynövelés
Általános teljesítményjavulás, amely a reprezentatív benchmarkok csoportján mérve 2-3%-os CPU-terhelés-csökkenést eredményez. A javulások között szerepel egy új, beépített map-implementáció, a kis objektumok hatékonyabb memóriafoglalása, valamint egy új, a futtatókörnyezeten belül használt mutex-implementáció. Az eredmények alkalmazásonként eltérhetnek.
Posztkvantum kriptográfia
A crypto/mlkem csomag bevezetése, amely az ML-KEM-768 és ML-KEM-1024 algoritmusokat implementálja. Az ML-KEM egy posztkvantum kulcscsere-mechanizmus, korábban Kyber néven ismert, és a FIPS 203 szabvány határozza meg. Ez a kiegészítés felkészíti a Go-t a kriptográfiai biztonság jövőjére.
TLS-fejlesztés
Támogatás a titkosított Client Hello (ECH) funkcióhoz TLS-ben. Ez a funkció a Config.EncryptedClientHelloKeys mező feltöltésével engedélyezhető, és növeli a TLS-kapcsolatok adatvédelmét és biztonságát.
Új Swiss Table alapú map
A teljesítmény javítása érdekében továbbfejlesztett map-implementáció. Ez az új implementáció Swiss Tables-en alapul, és a GOEXPERIMENT=noswissmap buildelési jelzővel letiltható.
Sync Map frissítés
Javult a sync.Map módosítási teljesítménye. Nagyobb méretű map-eken a diszjunkt kulcshalmazok módosításai sokkal kisebb valószínűséggel versenyeznek egymással, és a map alacsony versenyhelyzetű terhelés eléréséhez már nincs szükség felfutási időre. Ha problémákkal találkozik, a GOEXPERIMENT=nosynchashtriemap segítségével visszaállhat a korábbi implementációra.
Továbbfejlesztett JSON-kódolás
Új omitempty tagopció a struktúramezők okosabb kihagyásához JSON-kódolás során. Kódoláskor a omitempty opcióval rendelkező struktúramező kimarad, ha az értéke nulla. Ha a mező típusának van IsZero() bool metódusa, akkor ezt használja fel annak eldöntésére, hogy az érték nulla-e.
Futtatókörnyezeti takarítás
Az AddCleanup függvény bevezetése az erőforrás-kezelés javítása érdekében, a SetFinalizer helyettesítésére. A SetFinalizer-rel ellentétben nem élesztgeti újra a hozzá csatolt objektumot a finalizáláshoz, és egy objektumhoz több takarítófüggvény is csatolható. Az új kódban az AddCleanup használata javasolt a SetFinalizer helyett.
Eszközdirektívák a go.mod-ban
Továbbfejlesztett futtatható függőségkövetés a go.mod-ban található eszközdirektívák segítségével. Ez megszünteti azt a korábbi megoldást, amikor az eszközöket üres importként kellett felvenni egy hagyományosan „tools.go” nevű fájlba.
Könyvtárra korlátozott hozzáférés
Az os.Root típus új bevezetése a szabályozott fájlrendszer-műveletekhez. Az os.Root típus lehetővé teszi, hogy a fájlrendszer-műveleteket egy meghatározott könyvtáron belül végezzük, megakadályozva a megadott útvonalon kívüli hozzáférést.
Tesztelési fejlesztések
Új testing/synctest csomag párhuzamos kód teszteléséhez. A synctest.Run függvény goroutine-csoportot indít el egy elkülönített „buborékban”, a synctest.Wait függvény pedig megvárja, amíg az aktuális buborékban lévő összes goroutine blokkolttá válik. Ez a csomag kísérleti jellegű, és a build időben a GOEXPERIMENT=synctest beállításával engedélyezhető.
Build-gyorsítótár
A go run futtatható fájljai mostantól gyorsítótárazásra kerülnek a gyorsabb végrehajtás érdekében. Ez az ismételt futtatásokat gyorsabbá teszi, a gyorsítótár méretének növekedése árán.
Cgo teljesítmény
Új #cgo noescape és #cgo nocallback annotációk a jobb Cgo teljesítmény érdekében. A #cgo noescape cFunctionName azt jelzi a fordítónak, hogy a C függvénynek átadott memória nem szökik meg. A #cgo nocallback cFunctionName azt jelzi a fordítónak, hogy a C függvény nem hív vissza egyetlen Go függvényt sem.
Gyenge mutatók
Támogatás a gyenge mutatókhoz, amelyek lehetővé teszik a memória biztonságos hivatkozását anélkül, hogy az megakadályozná annak felszabadítását. A gyenge mutatók alacsony szintű primitívek, amelyek memóriahatékony struktúrák létrehozását teszik lehetővé, például értékek társítására szolgáló gyenge map-eket, kanonikalizáló map-eket és különféle típusú gyorsítótárakat.
Benchmark-fejlesztés
Új testing.B.Loop metódus gyorsabb, kevésbé hibaérzékeny benchmarkokhoz. A benchmark függvény -count futtatásonként pontosan egyszer hajtódik végre, így a költséges beállítási és takarítási lépések csak egyszer futnak le. A függvényhívások paraméterei és eredményei életben maradnak, megakadályozva, hogy a fordító teljesen optimalizálja ki a ciklus törzsét.
Go 1.24 jelentős kiadássá válik, amely a nyelv és az ökoszisztéma számos területén érdemi fejlesztéseket kínál.
