GoSuda

Vad är nytt i Go 1.24?

By Lemon Mint
views ...

Go 1.24 håller på att utvecklas till en betydande release, med en rad förbättringar fokuserade på prestanda, säkerhet och utvecklarupplevelse. Dessa förändringar syftar till att göra Go ännu kraftfullare och effektivare för att bygga moderna applikationer.

Performance Boost

En allmän prestandaförbättring med en 2-3% minskning av CPU-overhead över en svit av representativa benchmarks. Dessa förbättringar inkluderar en ny inbyggd map-implementation, effektivare minnesallokering av små objekt och en ny runtime-intern mutex-implementation. Resultaten kan variera beroende på applikation.

Post-Quantum Crypto

Introduktion av paketet crypto/mlkem, som implementerar ML-KEM-768 och ML-KEM-1024. ML-KEM är en post-quantum key exchange mechanism tidigare känd som Kyber och specificerad i FIPS 203. Detta tillägg förbereder Go för framtiden inom kryptografisk säkerhet.

TLS Enhancement

Stöd för Encrypted Client Hello (ECH) i TLS. Denna funktion kan aktiveras genom att fylla i fältet Config.EncryptedClientHelloKeys, vilket förbättrar integritet och säkerhet för TLS-anslutningar.

New Swiss Table Map

En förbättrad map-implementation för bättre prestanda. Denna nya implementation är baserad på Swiss Tables, och kan inaktiveras med build-flaggan GOEXPERIMENT=noswissmap.

Sync Map Update

Förbättrad prestanda för map-modifieringar i sync.Map. Modifieringar av disjunkta uppsättningar av nycklar är mycket mindre benägna att konkurrera på större maps, och det finns inte längre någon upprampningstid som krävs för att uppnå låg-konkurrens-laster från mapen. Om du stöter på problem kan du återgå till den gamla implementationen med GOEXPERIMENT=nosynchashtriemap.

Enhanced JSON Marshaling

Ett nytt omitempty tag-alternativ för smartare utelämnande av struct-fält under JSON marshaling. Vid marshaling kommer ett struct-fält med omitempty-alternativet att utelämnas om dess värde är noll. Om fälttypen har en IsZero() bool-metod, kommer den att användas för att bestämma om värdet är noll.

Runtime Cleanup

Introduktion av AddCleanup-funktionen för att ersätta SetFinalizer för bättre resurshantering. Till skillnad från SetFinalizer återupplivar den inte objektet den är kopplad till för finalisering, och flera cleanups kan kopplas till ett enda objekt. Ny kod bör föredra AddCleanup framför SetFinalizer.

Tool Directives in go.mod

Förbättrad spårning av körbara beroenden med hjälp av tool directives i go.mod. Detta eliminerar behovet av den tidigare lösningen att lägga till verktyg som tomma importer till en fil som konventionellt heter "tools.go".

Directory-Limited Access

Ny os.Root-typ för kontrollerade filsystemoperationer. Typen os.Root ger möjlighet att utföra filsystemoperationer inom en specifik katalog, vilket förhindrar åtkomst utanför den angivna sökvägen.

Testing Improvements

Nytt testing/synctest-paket för testning av samtidig kod. Funktionen synctest.Run startar en grupp goroutines i en isolerad "bubbla", och funktionen synctest.Wait väntar på att alla goroutines i den aktuella bubblan ska blockeras. Detta paket är experimentellt och måste aktiveras genom att ställa in GOEXPERIMENT=synctest vid kompileringstillfället.

Build Cache

go run-körbara filer cachelagras nu för snabbare exekvering. Detta gör upprepade exekveringar snabbare på bekostnad av att cachen blir större.

Cgo Performance

Nya #cgo noescape och #cgo nocallback-annotationer för bättre Cgo-prestanda. #cgo noescape cFunctionName talar om för kompilatorn att minne som skickas till C-funktionen inte undkommer. #cgo nocallback cFunctionName talar om för kompilatorn att C-funktionen inte anropar några Go-funktioner.

Weak Pointers

Stöd för weak pointers för att säkert referera till minne utan att förhindra återvinning. Weak pointers är en lågnivå-primitiv som tillhandahålls för att möjliggöra skapandet av minneseffektiva strukturer, såsom weak maps för att associera värden, kanoniseringsmaps och olika typer av caches.

Benchmark Improvement

Ny testing.B.Loop-metod för snabbare, mindre felbenägna benchmarks. Benchmark-funktionen kommer att exekveras exakt en gång per -count, så dyra setup- och cleanup-steg exekveras bara en gång. Funktionsanropsparametrar och resultat hålls vid liv, vilket förhindrar kompilatorn från att helt optimera bort loop-kroppen.

Go 1.24 håller på att utvecklas till en betydande release, som erbjuder betydande förbättringar inom olika aspekter av språket och dess ekosystem.

Overview of Go 1.24