---
id: 149c0672eec2caba57477612564e9368
author: Lemon Mint
title: 'Přehled vydání Go 1.24: mapy Swiss Table, ML-KEM, os.Root a testing/synctest'
description: 'Technický přehled Go 1.24: vestavěné mapy založené na Swiss Table, crypto/mlkem (FIPS 203), TLS Encrypted Client Hello, runtime.AddCleanup, os.Root a testing/synctest.'
language: cs
date: 2024-12-20T00:23:21.60729Z
path: /blog/posts/whats-new-in-go-1-24-z83ff24d2
category: release
---

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.

![Přehled Go 1.24](/assets/images/whats-new-in-go1.24/overview.webp)
