Översikt över Go 1.24: Swiss Table-kartor, ML-KEM, os.Root och testing/synctest

Go 1.24 utvecklas till en betydande version som introducerar en rad förbättringar med fokus på prestanda, säkerhet och utvecklarupplevelse. Dessa förändringar syftar till att göra Go ännu kraftfullare och mer effektivt för att bygga moderna applikationer.
Prestandaförbättring
En generell prestandaförbättring med en minskning av CPU-overhead med 2–3 procent över en svit av representativa benchmarks. Förbättringarna omfattar en ny inbyggd implementation av map, mer effektiv minnesallokering för små objekt och en ny runtime-intern mutex-implementation. Resultaten kan variera beroende på applikation.
Postkvantkryptografi
Introduktion av paketet crypto/mlkem, som implementerar ML-KEM-768 och ML-KEM-1024. ML-KEM är en postkvantmekanism för nyckelutbyte, tidigare känd som Kyber och specificerad i FIPS 203. Detta tillägg förbereder Go för framtidens kryptografiska säkerhet.
TLS-förbättring
Stöd för Encrypted Client Hello (ECH) i TLS. Funktionen aktiveras genom att fylla i fältet Config.EncryptedClientHelloKeys, vilket stärker integritet och säkerhet för TLS-anslutningar.
Ny Swiss Table-map
En förbättrad implementation av map för bättre prestanda. Den nya implementationen baseras på Swiss Tables och kan inaktiveras med build-flaggan GOEXPERIMENT=noswissmap.
Uppdatering av sync.Map
Förbättrad prestanda för modifieringar av map i sync.Map. Modifieringar av disjunkta uppsättningar nycklar är betydligt mindre benägna att konkurrera om resurser i större maps, och det krävs inte längre någon uppvärmningstid för att uppnå lågkonkurrensbelastning från mappen. Om du stöter på problem kan du återgå till den gamla implementationen med GOEXPERIMENT=nosynchashtriemap.
Förbättrad JSON-marshaling
En ny taloption omitempty för smartare utelämnande av struct-fält vid JSON-marshaling. Vid marshaling utelämnas ett struct-fält med alternativet omitempty om dess värde är noll. Om fälttypen har metoden IsZero() bool används den för att avgöra om värdet är noll.
Runtime-städning
Introduktion av funktionen AddCleanup för att ersätta SetFinalizer och för bättre resurshantering. Till skillnad från SetFinalizer återupplivar den inte objektet som den är kopplad till för finalisering, och flera cleanups kan kopplas till ett enskilt objekt. Ny kod bör föredra AddCleanup framför SetFinalizer.
Verktygsdirektiv i go.mod
Förbättrad spårning av körbara beroenden med hjälp av verktygsdirektiv i go.mod. Detta eliminerar behovet av den tidigare lösningen att lägga till verktyg som blank imports i en fil som konventionellt heter “tools.go”.
Katalogbegränsad åtkomst
Ny typ os.Root för kontrollerade filsystemsoperationer. Typen os.Root ger möjlighet att utföra filsystemsoperationer inom en specifik katalog och förhindrar åtkomst utanför den angivna sökvägen.
Förbättringar av testning
Nytt paket testing/synctest för testning av samtidig kod. Funktionen synctest.Run startar en grupp goroutines i en isolerad “bubbla”, och funktionen synctest.Wait väntar tills alla goroutines i den aktuella bubblan blockeras. Paketet är experimentellt och måste aktiveras genom att sätta GOEXPERIMENT=synctest vid byggtid.
Build-cache
Körbara filer från go run cachelagras nu för snabbare exekvering. Detta gör upprepade körningar snabbare på bekostnad av att cachen blir större.
Cgo-prestanda
Nya annoteringar #cgo noescape och #cgo nocallback för bättre Cgo-prestanda. #cgo noescape cFunctionName anger för kompilatorn att minne som skickas till C-funktionen inte undkommer. #cgo nocallback cFunctionName anger för kompilatorn att C-funktionen inte anropar tillbaka några Go-funktioner.
Svaga pekare
Stöd för svaga pekare för att säkert referera till minne utan att förhindra återvinning. Svaga pekare är en primitiv på lägre nivå som tillhandahålls för att möjliggöra skapandet av minneseffektiva strukturer, till exempel svaga maps för att associera värden, kanoniseringsmaps och olika typer av cacheminnen.
Benchmark-förbättring
Ny metod testing.B.Loop för snabbare och mindre felbenägna benchmarks. Benchmarkfunktionen körs exakt en gång per -count, så att dyra steg för setup och cleanup körs endast en gång. Parametrar och resultat från funktionsanrop hålls levande, vilket förhindrar kompilatorn från att helt optimera bort loopens kropp.
Go 1.24 utvecklas till en betydande version som erbjuder väsentliga förbättringar inom olika aspekter av språket och dess ekosystem.
