GoSuda

Čo je nové v Go 1.24?

By Lemon Mint
views ...

Go 1.24 sa formuje ako významné vydanie, ktoré prináša rad vylepšení zameraných na výkon, bezpečnosť a skúsenosti vývojárov. Tieto zmeny majú za cieľ urobiť Go ešte výkonnejším a efektívnejším pre tvorbu moderných aplikácií.

Zvýšenie výkonu

Všeobecné zlepšenie výkonu s 2-3 % znížením réžie CPU naprieč súborom reprezentatívnych benchmarkov. Tieto vylepšenia zahŕňajú novú vstavanú implementáciu mapy, efektívnejšiu alokáciu pamäte malých objektov a novú runtime-internú implementáciu mutexu. Výsledky sa môžu líšiť v závislosti od aplikácie.

Post-kvantová kryptografia

Zavedenie balíka crypto/mlkem, implementujúceho ML-KEM-768 a ML-KEM-1024. ML-KEM je post-kvantový mechanizmus výmeny kľúčov, predtým známy ako Kyber a špecifikovaný v FIPS 203. Toto doplnenie pripravuje Go na budúcnosť kryptografickej bezpečnosti.

Vylepšenie TLS

Podpora pre Encrypted Client Hello (ECH) v TLS. Túto funkciu je možné povoliť vyplnením poľa Config.EncryptedClientHelloKeys, čím sa zvýši súkromie a bezpečnosť pre pripojenia TLS.

Nová mapa Swiss Table

Vylepšená implementácia mapy pre lepší výkon. Táto nová implementácia je založená na Swiss Tables a môže byť zakázaná pomocou príznaku GOEXPERIMENT=noswissmap pri kompilácii.

Aktualizácia Sync Map

Zlepšený výkon pre úpravy mapy v sync.Map. Úpravy disjunktných množín kľúčov sú oveľa menej náchylné na konflikty na väčších mapách a už nie je potrebný žiadny čas na nábeh na dosiahnutie nízko-konfliktných záťaží z mapy. Ak narazíte na problémy, môžete sa vrátiť k starej implementácii pomocou GOEXPERIMENT=nosynchashtriemap.

Vylepšené JSON Marshaling

Nová voľba tagu omitempty pre inteligentnejšie vynechávanie poľa štruktúry počas JSON marshalingu. Pri marshalingu bude pole štruktúry s voľbou omitempty vynechané, ak je jeho hodnota nulová. Ak má typ poľa metódu IsZero() bool, tá sa použije na určenie, či je hodnota nulová.

Čistenie Runtime

Zavedenie funkcie AddCleanup, ktorá nahrádza SetFinalizer pre lepšiu správu zdrojov. Na rozdiel od SetFinalizer neobnovuje objekt, ku ktorému je pripojená pre finalizáciu, a k jednému objektu je možné pripojiť viacero čistiacich operácií. Nový kód by mal preferovať AddCleanup pred SetFinalizer.

Direktívy nástrojov v go.mod

Vylepšené sledovanie závislostí spustiteľných súborov pomocou direktív nástrojov v go.mod. To odstraňuje potrebu predchádzajúceho riešenia pridávania nástrojov ako prázdnych importov do súboru konvenčne nazývaného „tools.go“.

Prístup obmedzený na adresár

Nový typ os.Root pre riadené operácie so súborovým systémom. Typ os.Root poskytuje možnosť vykonávať operácie so súborovým systémom v rámci špecifického adresára, čím zabraňuje prístupu mimo špecifikovanej cesty.

Zlepšenia testovania

Nový balík testing/synctest pre testovanie súbežného kódu. Funkcia synctest.Run spúšťa skupinu goroutines v izolovanom „bubline“ a funkcia synctest.Wait čaká, kým sa všetky goroutines v aktuálnej bubline zablokujú. Tento balík je experimentálny a musí byť povolený nastavením GOEXPERIMENT=synctest v čase kompilácie.

Cache kompilácie

Spustiteľné súbory go run sú teraz cachované pre rýchlejšie vykonávanie. To robí opakované vykonávanie rýchlejším na úkor zväčšenia cache.

Výkon Cgo

Nové anotácie #cgo noescape a #cgo nocallback pre lepší výkon Cgo. #cgo noescape cFunctionName hovorí kompilátoru, že pamäť odovzdaná funkcii C neuniká. #cgo nocallback cFunctionName hovorí kompilátoru, že funkcia C nevolá späť žiadne funkcie Go.

Slabé ukazovatele

Podpora slabých ukazovateľov na bezpečné odkazovanie na pamäť bez zabránenia jej uvoľneniu. Slabé ukazovatele sú nízkoúrovňový primitív poskytovaný na umožnenie vytvárania pamäťovo efektívnych štruktúr, ako sú slabé mapy pre asociovanie hodnôt, kanonizačné mapy a rôzne druhy cache.

Zlepšenie Benchmarku

Nová metóda testing.B.Loop pre rýchlejšie a menej chybové benchmarky. Funkcia benchmarku sa vykoná presne raz za -count, takže nákladné kroky nastavenia a čistenia sa vykonajú iba raz. Parametre a výsledky volania funkcie sú zachované, čo bráni kompilátoru v plnej optimalizácii tela slučky.

Go 1.24 sa formuje ako významné vydanie, ktoré ponúka podstatné vylepšenia v rôznych aspektoch jazyka a jeho ekosystému.

Prehľad Go 1.24