GoSuda

Wat is nieuw in Go 1.24?

By Lemon Mint
views ...

Go 1.24 ontpopt zich als een belangrijke release, die een reeks verbeteringen introduceert gericht op prestaties, beveiliging en ontwikkelaarservaring. Deze wijzigingen zijn gericht op het nog krachtiger en efficiënter maken van Go voor het bouwen van moderne applicaties.

Prestatieverbetering

Een algemene prestatieverbetering met een vermindering van 2-3% in CPU-overhead over een reeks representatieve benchmarks. Deze verbeteringen omvatten een nieuwe ingebouwde map-implementatie, efficiëntere geheugentoewijzing van kleine objecten en een nieuwe runtime-interne mutex-implementatie. Resultaten kunnen per applicatie variëren.

Post-Quantum Crypto

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 voor 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 GOEXPERIMENT=noswissmap build flag.

Sync Map Update

Verbeterde prestaties voor map-modificaties in sync.Map. Modificaties van disjuncte sets van sleutels zullen veel minder snel conflicteren op grotere maps, en er is geen opstarttijd meer nodig om lage-conflict-belastingen van de map te bereiken. Als u problemen ondervindt, kunt u terugkeren naar de oude implementatie met GOEXPERIMENT=nosynchashtriemap.

Verbeterde JSON Marshaling

Een nieuwe omitempty tag-optie voor slimmere weglating van struct-velden tijdens JSON marshaling. Bij marshaling wordt een struct-veld met de omitempty optie weggelaten als de waarde nul is. Als het veldtype een IsZero() bool methode heeft, wordt deze gebruikt om te bepalen of de waarde nul is.

Runtime Cleanup

Introductie van de AddCleanup functie ter vervanging van SetFinalizer voor beter resourcebeheer. In tegenstelling tot SetFinalizer doet het het object waaraan het is gekoppeld niet herleven voor finalisatie, en meerdere cleanups kunnen aan een enkel object worden gekoppeld. Nieuwe code zou AddCleanup moeten verkiezen boven SetFinalizer.

Tool Directives in go.mod

Verbeterde tracering van uitvoerbare afhankelijkheden met behulp van tool directives in go.mod. Dit maakt de noodzaak van de vorige workaround, waarbij tools als blanco imports aan een bestand met de conventionele naam "tools.go" werden toegevoegd, overbodig.

Directory-beperkte toegang

Nieuw os.Root type voor gecontroleerde bestandssysteemoperaties. Het os.Root type biedt de mogelijkheid om bestandssysteemoperaties uit te voeren binnen een specifieke directory, waardoor toegang buiten het gespecificeerde pad wordt voorkomen.

Testverbeteringen

Nieuw testing/synctest pakket voor het testen van concurrente code. De synctest.Run functie start een groep goroutines in een geïsoleerde "bubble", en de synctest.Wait functie wacht tot alle goroutines in de huidige bubble blokkeren. Dit pakket is experimenteel en moet worden ingeschakeld door GOEXPERIMENT=synctest in te stellen tijdens het build-proces.

Build Cache

go run executables worden nu gecached voor snellere uitvoering. Dit maakt herhaalde uitvoeringen sneller ten koste van een grotere cache.

Cgo Prestaties

Nieuwe #cgo noescape en #cgo nocallback annotaties 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 geen callbacks naar Go-functies uitvoert.

Zwakke Pointers

Ondersteuning voor zwakke pointers om veilig naar geheugen te verwijzen zonder reclaim te voorkomen. Zwakke pointers zijn een low-level primitief dat wordt geleverd om de creatie van geheugenefficiënte structuren mogelijk te maken, zoals zwakke maps voor het associëren van waarden, canonicalisatiemaps en verschillende soorten caches.

Benchmarkverbetering

Nieuwe testing.B.Loop methode voor snellere, minder foutgevoelige benchmarks. De benchmarkfunctie zal precies één keer per -count worden uitgevoerd, zodat dure setup- en cleanup-stappen slechts één keer worden uitgevoerd. Functieaanroep parameters en resultaten blijven actief, waardoor de compiler de loop body niet volledig kan optimaliseren.

Go 1.24 ontpopt zich als een belangrijke release, die substantiële verbeteringen biedt in verschillende aspecten van de taal en haar ecosysteem.

Overzicht van Go 1.24