Co je nového v Go 1.24?
Go 1.24 se rýsuje jako významná verze, která zavádí řadu vylepšení zaměřených na výkon, bezpečnost a zkušenosti vývojářů. Tyto změny mají za cíl učinit Go ještě výkonnějším a efektivnějším pro tvorbu moderních aplikací.
Performance Boost
Obecné zlepšení výkonu s 2-3% snížením zatížení CPU napříč sadou reprezentativních benchmarků. Tato vylepšení zahrnují novou vestavěnou implementaci mapy, efektivnější alokaci paměti malých objektů a novou runtime-interní implementaci mutexu. Výsledky se mohou lišit v závislosti na aplikaci.
Post-Quantum Crypto
Zavedení balíčku crypto/mlkem
, implementujícího ML-KEM-768 a ML-KEM-1024. ML-KEM je post-kvantový mechanismus pro výměnu klíčů dříve známý jako Kyber a specifikovaný v FIPS 203. Tento doplněk připravuje Go na budoucnost kryptografické bezpečnosti.
TLS Enhancement
Podpora Encrypted Client Hello (ECH) v TLS. Tuto funkci lze povolit naplněním pole Config.EncryptedClientHelloKeys
, čímž se zvyšuje soukromí a bezpečnost TLS připojení.
New Swiss Table Map
Vylepšená implementace mapy pro lepší výkon. Tato nová implementace je založena na Swiss Tables a lze ji zakázat pomocí build flagu GOEXPERIMENT=noswissmap
.
Sync Map Update
Vylepšený výkon pro modifikace map v sync.Map
. Modifikace disjunktních sad klíčů jsou mnohem méně náchylné k souběhu na větších mapách a již není vyžadována žádná doba náběhu k dosažení nízkého zatížení z mapy. Pokud narazíte na problémy, můžete se vrátit k původní implementaci pomocí GOEXPERIMENT=nosynchashtriemap
.
Enhanced JSON Marshaling
Nová volba omitempty
tagu pro chytřejší vynechávání polí struct během JSON marshalingu. Při marshalingu bude pole struct s volbou omitempty
vynecháno, pokud je jeho hodnota nulová. Pokud typ pole má metodu IsZero() bool
, ta bude použita k určení, zda je hodnota nulová.
Runtime Cleanup
Zavedení funkce AddCleanup
nahrazující SetFinalizer
pro lepší správu zdrojů. Na rozdíl od SetFinalizer
neobnovuje objekt, ke kterému je připojena pro finalizaci, a k jednomu objektu lze připojit více cleanupů. Nový kód by měl preferovat AddCleanup
před SetFinalizer
.
Tool Directives in go.mod
Vylepšené sledování závislostí spustitelných souborů pomocí tool directives v go.mod
. To odstraňuje potřebu předchozího řešení přidávání nástrojů jako prázdných importů do souboru obvykle nazvaného „tools.go“.
Directory-Limited Access
Nový typ os.Root
pro řízené operace se souborovým systémem. Typ os.Root
poskytuje schopnost provádět operace se souborovým systémem v rámci specifického adresáře, čímž zabraňuje přístupu mimo určenou cestu.
Testing Improvements
Nový balíček testing/synctest
pro testování souběžného kódu. Funkce synctest.Run
spouští skupinu gorutin v izolované „bublině“ a funkce synctest.Wait
čeká na zablokování všech gorutin v aktuální bublině. Tento balíček je experimentální a musí být povolen nastavením GOEXPERIMENT=synctest
v době sestavení.
Build Cache
Spustitelné soubory go run
jsou nyní cachovány pro rychlejší provádění. To zrychluje opakované spouštění na úkor zvětšení cache.
Cgo Performance
Nové anotace #cgo noescape
a #cgo nocallback
pro lepší výkon Cgo. #cgo noescape cFunctionName
říká kompilátoru, že paměť předaná C funkci neuniká. #cgo nocallback cFunctionName
říká kompilátoru, že C funkce nezavolá zpět žádné Go funkce.
Weak Pointers
Podpora slabých ukazatelů pro bezpečné odkazování na paměť bez zabránění uvolnění. Slabé ukazatele jsou nízkoúrovňový primitiv poskytovaný pro umožnění tvorby paměťově efektivních struktur, jako jsou slabé mapy pro asociaci hodnot, kanonizační mapy a různé druhy cache.
Benchmark Improvement
Nová metoda testing.B.Loop
pro rychlejší a méně náchylné k chybám benchmarky. Benchmarková funkce se provede přesně jednou za -count
, takže nákladné kroky nastavení a čištění se provedou pouze jednou. Parametry a výsledky volání funkcí jsou udržovány živé, což brání kompilátoru v plné optimalizaci těla smyčky.
Go 1.24 se rýsuje jako významná verze, nabízející podstatná vylepšení v různých aspektech jazyka a jeho ekosystému.