Přehled vydání Go 1.24: mapy Swiss Table, ML-KEM, os.Root a testing/synctest

Go 1.24 se připravuje jako významné vydání, které přináší řadu vylepšení zaměřených na výkon, bezpečnost a zkušenost vývojářů. Tyto změny mají Go učinit ještě výkonnějším a efektivnějším pro vytváření moderních aplikací.
Zvýšení výkonu
Obecné zlepšení výkonu se snížením režie procesoru o 2–3 % napříč sadou reprezentativních benchmarků. Tato vylepšení zahrnují novou vestavěnou implementaci mapy, efektivnější alokaci paměti pro malé objekty a novou interní implementaci mutexu v runtime. Výsledky se mohou u různých aplikací lišit.
Post-kvantová kryptografie
Zavedení balíčku crypto/mlkem, který implementuje ML-KEM-768 a ML-KEM-1024. ML-KEM je post-kvantový mechanismus výměny klíčů dříve známý jako Kyber a specifikovaný ve standardu FIPS 203. Tato novinka připravuje Go na budoucnost kryptografické bezpečnosti.
Vylepšení TLS
Podpora Encrypted Client Hello (ECH) v TLS. Tuto funkci lze povolit naplněním pole Config.EncryptedClientHelloKeys, což zvyšuje soukromí a bezpečnost TLS spojení.
Nová mapa Swiss Table
Vylepšená implementace mapy pro lepší výkon. Tato nová implementace je založena na Swiss Tables a lze ji vypnout pomocí sestavovacího příznaku GOEXPERIMENT=noswissmap.
Aktualizace sync.Map
Zlepšený výkon při úpravách mapy v sync.Map. Úpravy disjunktních množin klíčů s mnohem menší pravděpodobností kolidují na větších mapách a načítání z mapy již nevyžaduje žádný čas na zahřátí k dosažení nízké míry sporů. Pokud narazíte na problémy, můžete se vrátit ke staré implementaci pomocí GOEXPERIMENT=nosynchashtriemap.
Vylepšené JSON marshalování
Nová volba tagu omitempty pro chytřejší vynechávání polí struktury při JSON marshalování. Při marshalování bude pole struktury s volbou omitempty vynecháno, pokud je jeho hodnota nulová. Pokud typ pole má metodu IsZero() bool, použije se k určení, zda je hodnota nulová.
Úklid v runtime
Zavedení funkce AddCleanup jako náhrady za SetFinalizer pro lepší správu prostředků. Na rozdíl od SetFinalizer neobnovuje objekt, ke kterému je připojena, pro účely finalizace, a k jednomu objektu lze připojit více úklidových funkcí. Nový kód by měl dávat přednost AddCleanup před SetFinalizer.
Nástrojové direktivy v go.mod
Vylepšené sledování závislostí na spustitelných nástrojích pomocí nástrojových direktiv v go.mod. Tím odpadá nutnost dřívější obcházky, kdy se nástroje přidávaly jako prázdné importy do souboru běžně nazvaného „tools.go“.
Přístup omezený na adresář
Nový typ os.Root pro řízené operace se souborovým systémem. Typ os.Root umožňuje provádět operace se souborovým systémem uvnitř konkrétního adresáře a brání přístupu mimo určenou cestu.
Vylepšení testování
Nový balíček testing/synctest pro testování souběžného kódu. Funkce synctest.Run spustí skupinu goroutin v izolované „bublině“ a funkce synctest.Wait čeká, až všechny goroutiny v aktuální bublině zablokují. Tento balíček je experimentální a musí být povolen nastavením GOEXPERIMENT=synctest při sestavování.
Cache sestavení
Spustitelné soubory go run se nyní ukládají do cache pro rychlejší spuštění. To zrychluje opakovaná spuštění na úkor větší velikosti cache.
Výkon Cgo
Nové anotace #cgo noescape a #cgo nocallback pro lepší výkon Cgo. #cgo noescape cFunctionName sděluje kompilátoru, že paměť předaná C funkci neunikne. #cgo nocallback cFunctionName sděluje kompilátoru, že C funkce nevolá zpět žádné Go funkce.
Slabé ukazatele
Podpora slabých ukazatelů pro bezpečný odkaz na paměť bez bránění jejímu uvolnění. Slabé ukazatele jsou nízkoúrovňový primitivní prvek určený k vytváření paměťově úsporných struktur, například slabých map pro přiřazování hodnot, map kanonizace a různých druhů cache.
Vylepšení benchmarků
Nová metoda testing.B.Loop pro rychlejší a méně chybové benchmarky. Benchmarkovací funkce se provede přesně jednou na každou hodnotu -count, takže nákladné kroky přípravy a úklidu proběhnou pouze jednou. Parametry a výsledky volání funkcí zůstávají živé, což brání kompilátoru v úplné optimalizaci těla smyčky.
Go 1.24 se připravuje jako významné vydání, které nabízí podstatná zlepšení v různých oblastech jazyka a jeho ekosystému.
