GoSuda

Go 1.24 Overzicht van de release: Swiss Table Maps, ML-KEM, os.Root en testing/synctest

By Lemon Mint views ...

Go 1.24 ontwikkelt zich tot een belangrijke release, met een reeks verbeteringen gericht op prestaties, beveiliging en ontwikkelaarservaring. Deze wijzigingen beogen Go nog krachtiger en efficiënter te maken voor het bouwen van moderne applicaties.

Prestatieverbetering

Een algemene prestatieverbetering met een reductie van 2-3% in CPU-overhead over een reeks representatieve benchmarks. Deze verbeteringen omvatten een nieuwe ingebouwde map-implementatie, efficiëntere geheugentoewijzing voor kleine objecten en een nieuwe, intern in de runtime gebruikte mutex-implementatie. Resultaten kunnen per applicatie verschillen.

Post-Quantum Cryptografie

Introductie van het crypto/mlkem pakket, dat ML-KEM-768 en ML-KEM-1024 implementeert. ML-KEM is een post-quantum sleuteluitwisselingsmechanisme, voorheen bekend als Kyber en gespecificeerd in FIPS 203. Deze toevoeging bereidt Go voor op de toekomst van cryptografische beveiliging.

TLS-verbetering

Ondersteuning voor Encrypted Client Hello (ECH) in TLS. Deze functie kan worden ingeschakeld door het veld Config.EncryptedClientHelloKeys te vullen, wat de privacy en beveiliging van TLS-verbindingen verbetert.

Nieuwe Swiss Table Map

Een verbeterde map-implementatie voor betere prestaties. Deze nieuwe implementatie is gebaseerd op Swiss Tables en kan worden uitgeschakeld met de buildvlag GOEXPERIMENT=noswissmap.

Update van Sync Map

Verbeterde prestaties voor wijzigingen in maps binnen sync.Map. Wijzigingen van disjuncte sets van sleutels leiden op grotere maps veel minder vaak tot contentie, en er is niet langer een opwarmperiode nodig om een lage contentie bij het lezen uit de map te bereiken. Als u problemen ondervindt, kunt u terugkeren naar de oude implementatie met GOEXPERIMENT=nosynchashtriemap.

Verbeterde JSON-marshaling

Een nieuwe omitempty-tagoptie voor slimmer weglaten van structuurvelden tijdens JSON-marshaling. Bij marshaling wordt een structuurveld met de optie omitempty weggelaten als de waarde nul is. Als het veldtype een methode IsZero() bool heeft, wordt deze gebruikt om te bepalen of de waarde nul is.

Opschoning in de runtime

Introductie van de functie AddCleanup ter vervanging van SetFinalizer voor beter resourcebeheer. In tegenstelling tot SetFinalizer doet deze functie het object waaraan zij is gekoppeld niet herleven voor finalisatie, en kunnen meerdere opschoningsfuncties aan één object worden gekoppeld. Nieuwe code verdient de voorkeur boven AddCleanup gegeven SetFinalizer.

Tool-directives in go.mod

Verbeterde tracering van uitvoerbare afhankelijkheden met behulp van tool-directives in go.mod. Hiermee vervalt de noodzaak voor de vorige workaround, waarbij tools als blank imports werden toegevoegd aan een bestand dat conventioneel “tools.go” heet.

Tot een directory beperkte toegang

Nieuw os.Root-type voor gecontroleerde bestandssysteembewerkingen. Het type os.Root biedt de mogelijkheid om bestandssysteembewerkingen binnen een specifieke directory uit te voeren, waarbij toegang buiten het opgegeven pad wordt voorkomen.

Verbeteringen aan het testen

Nieuw testing/synctest-pakket voor het testen van gelijktijdige code. De functie synctest.Run start een groep goroutines in een geïsoleerde “bubble”, en de functie synctest.Wait wacht totdat alle goroutines in de huidige bubble zijn geblokkeerd. Dit pakket is experimenteel en moet worden ingeschakeld door GOEXPERIMENT=synctest in te stellen tijdens het bouwen.

Build-cache

Uitvoerbare bestanden van go run worden nu gecachet voor snellere uitvoering. Dit maakt herhaalde uitvoeringen sneller, ten koste van een grotere cache.

Cgo-prestaties

Nieuwe annotaties #cgo noescape en #cgo nocallback voor betere Cgo-prestaties. #cgo noescape cFunctionName vertelt de compiler dat geheugen dat aan de C-functie wordt doorgegeven niet ontsnapt. #cgo nocallback cFunctionName vertelt de compiler dat de C-functie niet terugroept naar Go-functies.

Zwakke pointers

Ondersteuning voor zwakke pointers om geheugen veilig te refereren zonder terugwinning te verhinderen. Zwakke pointers zijn een laagniveau-primitief dat is ontwikkeld om geheugenefficiënte structuren mogelijk te maken, zoals zwakke maps voor het associëren van waarden, canonicalisatie-maps en verschillende soorten caches.

Verbetering van benchmarks

Nieuwe methode testing.B.Loop voor snellere en minder foutgevoelige benchmarks. De benchmarkfunctie wordt precies één keer per -count uitgevoerd, zodat dure setup- en opruimstappen slechts één keer worden uitgevoerd. Parameters en resultaten van functieaanroepen blijven in leven, waardoor de compiler het lichaam van de lus niet volledig kan wegoptimaliseren.

Go 1.24 ontwikkelt zich tot een belangrijke release, met aanzienlijke verbeteringen op diverse gebieden van de taal en het ecosysteem.

Overzicht van Go 1.24