Čo je nové v Go 1.24?
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.