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

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.
