GoSuda

Co je nového v Go 1.24?

By Lemon Mint
views ...

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.

Overview of Go 1.24