GoSuda

Prehľad vydania Go 1.24: Swiss Table Maps, ML-KEM, os.Root a testing/synctest

By Lemon Mint views ...

Go 1.24 sa rysuje 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 pri tvorbe moderných aplikácií.

Zlepšenie výkonu

Všeobecné zlepšenie výkonu so znížením réžie CPU o 2–3 % naprieč súborom reprezentatívnych benchmarkov. Tieto zlepšenia zahŕňajú novú vstavanú implementáciu mapy, efektívnejšie prideľovanie pamäte pre malé objekty 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, ktorý implementuje 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 norme FIPS 203. Tento doplnok pripravuje Go na budúcnosť kryptografickej bezpečnosti.

Vylepšenie TLS

Podpora Encrypted Client Hello (ECH) v TLS. Túto funkciu je možné aktivovať naplnením poľa Config.EncryptedClientHelloKeys, čím sa zvyšuje súkromie a bezpečnosť TLS spojení.

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 možno ju vypnúť pomocou build príznaku GOEXPERIMENT=noswissmap.

Aktualizácia sync.Map

Zlepšený výkon pri modifikáciách mapy v sync.Map. Modifikácie disjunktných množín kľúčov sa na väčších mapách oveľa menej pravdepodobne navzájom blokujú a z mapy už nie je potrebný žiadny čas na zahriatie na dosiahnutie načítaní s nízkou mierou konkurencie. Ak narazíte na problémy, môžete sa vrátiť k pôvodnej implementácii pomocou GOEXPERIMENT=nosynchashtriemap.

Vylepšené JSON marshaling

Nová možnosť značky omitempty pre inteligentnejšie vynechávanie polí štruktúry počas JSON marshalingu. Pri marshalingu bude pole štruktúry s možnosťou omitempty vynechané, ak je jeho hodnota nulová. Ak typ poľa má metódu IsZero() bool, použije sa táto metóda na určenie, či je hodnota nulová.

Vyčistenie runtime

Zavedenie funkcie AddCleanup ako náhrady za SetFinalizer pre lepšiu správu zdrojov. Na rozdiel od SetFinalizer neobnovuje objekt, ku ktorému je pripojená, pre účely finalizácie, a k jednému objektu možno pripojiť viacero čistiacich funkcií. Nový kód by mal uprednostňovať AddCleanup pred SetFinalizer.

Nástrojové direktívy v go.mod

Zlepšené sledovanie závislostí spustiteľných nástrojov pomocou nástrojových direktív v go.mod. Tým odpadá potreba predchádzajúceho riešenia, ktorým bolo pridávanie 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 na riadené operácie so súborovým systémom. Typ os.Root umožňuje vykonávať operácie so súborovým systémom v rámci konkrétneho adresára a zabraňuje prístupu mimo určenej cesty.

Vylepšenia testovania

Nový balík testing/synctest na testovanie súbežného kódu. Funkcia synctest.Run spustí skupinu goroutín v izolovanej „bubline“ a funkcia synctest.Wait čaká, kým sa všetky goroutiny v aktuálnej bubline zablokujú. Tento balík je experimentálny a musí sa povoliť nastavením GOEXPERIMENT=synctest pri zostavovaní.

Build cache

Spustiteľné súbory go run sú teraz ukladané do cache pre rýchlejšie spúšťanie. Opakované spúšťanie je tak rýchlejšie na úkor väčšej veľkosti cache.

Výkon Cgo

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

Slabé ukazovatele

Podpora slabých ukazovateľov na bezpečné odkazovanie na pamäť bez toho, aby bránili jej uvoľneniu. Slabé ukazovatele sú nízkoúrovňový primitívny prvok poskytnutý na vytváranie pamäťovo úsporných štruktúr, ako sú slabé mapy na priraďovanie hodnôt, mapy kanonikalizácie a rôzne druhy cache.

Zlepšenie benchmarkov

Nová metóda testing.B.Loop pre rýchlejšie a menej chybové benchmarky. Benchmarková funkcia sa vykoná presne raz na každé -count, takže náročné kroky nastavenia a upratovania sa vykonajú iba raz. Parametre volania funkcie a výsledky sa udržiavajú pri živote, čím sa kompilátoru bráni v úplnej optimalizácii tela cyklu.

Go 1.24 sa rysuje ako významné vydanie, ktoré prináša podstatné zlepšenia v rôznych oblastiach jazyka a jeho ekosystému.

Prehľad Go 1.24