Wat is nieuw in Go 1.24?
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.