Mi újdonság a Go 1.24-ben?
A Go 1.24 jelentős kiadásnak ígérkezik, számos fejlesztést vezet be, amelyek a teljesítményre, a biztonságra és a fejlesztői élményre összpontosítanak. Ezek a változtatások célja, hogy a Go még erősebb és hatékonyabb legyen a modern alkalmazások építéséhez.
Teljesítmény-növelés
Általános teljesítményjavulás, 2-3%-os CPU-terhelés csökkenés egy reprezentatív benchmark-sorozaton keresztül. Ezek a fejlesztések magukban foglalják egy új beépített map implementációt, a kis objektumok hatékonyabb memóriafoglalását, és egy új runtime-belső mutex implementációt. Az eredmények alkalmazásonként változhatnak.
Post-Quantum Crypto
A crypto/mlkem
csomag bevezetése, amely az ML-KEM-768 és ML-KEM-1024 implementálja. Az ML-KEM egy post-quantum kulcscsere mechanizmus, korábban Kyber néven volt ismert és a FIPS 203 szabványban van specifikálva. 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 az Encrypted Client Hello (ECH) számára a TLS-ben. Ez a funkció engedélyezhető a Config.EncryptedClientHelloKeys
mező kitöltésével, növelve a TLS-kapcsolatok adatvédelmét és biztonságát.
Új Swiss Table Map
Egy továbbfejlesztett map implementáció a jobb teljesítmény érdekében. Ez az új implementáció a Swiss Tables-en alapul, és kikapcsolható a GOEXPERIMENT=noswissmap
build flag-gel.
Sync Map frissítés
Javított teljesítmény a sync.Map
map módosításaihoz. A kulcsok diszjunkt halmazainak módosításai sokkal kisebb valószínűséggel versengenek nagyobb map-okon, és már nincs szükség felmelegedési időre ahhoz, hogy alacsony versengésű terheléseket érjünk el a map-ból. Ha problémákkal találkozik, visszatérhet a régi implementációhoz a GOEXPERIMENT=nosynchashtriemap
használatával.
Továbbfejlesztett JSON Marshaling
Egy új omitempty
tag opció az intelligensebb struct mező elhagyásához a JSON marshaling során. Marshalingkor egy omitempty
opcióval rendelkező struct mező elhagyásra kerül, ha az értéke nulla. Ha a mező típusa rendelkezik egy IsZero() bool
metódussal, azt használja majd annak meghatározására, hogy az érték nulla-e.
Runtime Tisztítás
Az AddCleanup
funkció bevezetése a SetFinalizer
helyettesítésére a jobb erőforrás-kezelés érdekében. A SetFinalizer
-rel ellentétben nem éleszti fel azt az objektumot, amelyhez csatolva van a véglegesítéshez, és több tisztítás is csatolható egyetlen objektumhoz. Az új kódnak az AddCleanup
-et kell előnyben részesítenie a SetFinalizer
-rel szemben.
Eszköz direktívák a go.mod-ban
Javított végrehajtható függőségkövetés a go.mod-ban található eszköz direktívák használatával. Ez megszünteti a korábbi áthidaló megoldás szükségességét, miszerint az eszközöket üres importként adták hozzá egy hagyományosan „tools.go” nevű fájlhoz.
Könyvtár-korlátozott hozzáférés
Új os.Root
típus a szabályozott fájlrendszer-műveletekhez. Az os.Root
típus lehetőséget biztosít a fájlrendszer-műveletek végrehajtására egy adott könyvtáron belül, megakadályozva a hozzáférést a megadott útvonalon kívülre.
Tesztelési fejlesztések
Új testing/synctest
csomag a konkurens kód tesztelésére. A synctest.Run
függvény goroutine-ok egy csoportját indítja el egy izolált „buborékban”, és a synctest.Wait
függvény megvárja, amíg az aktuális buborékban lévő összes goroutine blokkolódik. Ez a csomag kísérleti jellegű, és engedélyezni kell a GOEXPERIMENT=synctest
beállításával a build időben.
Build Cache
A go run
végrehajtható fájlok mostantól gyorsabb végrehajtás érdekében gyorsítótárba kerülnek. Ez gyorsabbá teszi az ismételt végrehajtásokat a cache növekedésének á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 mondja a fordítónak, hogy a C függvénynek átadott memória nem szökik meg. A #cgo nocallback cFunctionName
azt mondja a fordítónak, hogy a C függvény nem hív vissza semmilyen Go függvényt.
Gyenge pointerek
Gyenge pointerek támogatása a memória biztonságos hivatkozásához a visszanyerés megakadályozása nélkül. A gyenge pointerek alacsony szintű primitívek, amelyek lehetővé teszik memóriahatékony struktúrák létrehozását, mint például a gyenge map-ek értékek társítására, kanonizációs map-ok és különféle gyorsítótárak.
Benchmark fejlesztés
Új testing.B.Loop
metódus a gyorsabb, kevésbé hibára hajlamos benchmark-okhoz. A benchmark függvény pontosan egyszer fog futni minden -count
értékre, így a költséges beállítási és tisztítási lépések csak egyszer hajtódnak végre. A függvényhívási paraméterek és eredmények életben maradnak, megakadályozva a fordítót abban, hogy teljesen optimalizálja a ciklus törzsét.
A Go 1.24 jelentős kiadásnak ígérkezik, jelentős fejlesztéseket kínálva a nyelv és ökoszisztémájának különböző aspektusaiban.