GoSuda

Mi újdonság a Go 1.24-ben?

By Lemon Mint
views ...

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.

Overview of Go 1.24