Go 1.24-udgivelsesoversigt: Swiss Table-maps, ML-KEM, os.Root og testing/synctest

Go 1.24 er ved at tegne sig som en betydelig udgivelse, der introducerer en række forbedringer med fokus på ydeevne, sikkerhed og udvikleroplevelse. Disse ændringer har til formål at gøre Go endnu kraftigere og mere effektiv til udvikling af moderne applikationer.
Ydelsesforbedring
En generel ydelsesforbedring med en reduktion af CPU-overhead på 2-3 % på tværs af en række repræsentative benchmarks. Forbedringerne omfatter en ny indbygget map-implementering, mere effektiv allokering af hukommelse til små objekter og en ny runtime-intern mutex-implementering. Resultaterne kan variere afhængigt af applikationen.
Post-Quantum Kryptografi
Introduktion af pakken crypto/mlkem, der implementerer ML-KEM-768 og ML-KEM-1024. ML-KEM er en post-kvante nøgleudvekslingsmekanisme, tidligere kendt som Kyber, og specificeret i FIPS 203. Denne tilføjelse forbereder Go til fremtidens kryptografiske sikkerhed.
TLS-forbedring
Understøttelse af Encrypted Client Hello (ECH) i TLS. Denne funktion kan aktiveres ved at udfylde feltet Config.EncryptedClientHelloKeys, hvilket styrker privatlivets fred og sikkerheden for TLS-forbindelser.
Ny Swiss Table Map
En forbedret map-implementering med bedre ydeevne. Denne nye implementering er baseret på Swiss Tables og kan deaktiveres med build-flaget GOEXPERIMENT=noswissmap.
Opdatering af Sync Map
Forbedret ydeevne for ændringer i sync.Map. Ændringer af disjunkte nøglemængder har meget mindre sandsynlighed for at skabe konkurrence om låse i større maps, og der kræves ikke længere nogen opvarmningstid for at opnå belastninger med lav konkurrence fra map'et. Hvis du oplever problemer, kan du vende tilbage til den gamle implementering ved at bruge GOEXPERIMENT=nosynchashtriemap.
Forbedret JSON-marshaling
En ny tagindstilling omitempty til smartere udeladelse af struct-felter under JSON-marshaling. Ved marshaling udelades et struct-felt med indstillingen omitempty, hvis dets værdi er nulværdien. Hvis feltets type har en metode IsZero() bool, bruges den til at afgøre, om værdien er nul.
Oprydning under runtime
Introduktion af funktionen AddCleanup til at erstatte SetFinalizer for bedre ressourcehåndtering. I modsætning til SetFinalizer genopliver den ikke det objekt, den er knyttet til, til finalisering, og flere cleanups kan knyttes til et enkelt objekt. Ny kode bør foretrække AddCleanup frem for SetFinalizer.
Værktøjsdirektiver i go.mod
Forbedret sporing af eksekverbare afhængigheder ved hjælp af værktøjsdirektiver i go.mod. Dette fjerner behovet for den tidligere løsning med at tilføje værktøjer som blank imports i en fil, der konventionelt hedder “tools.go”.
Begrænset adgang til mapper
Ny type os.Root til kontrollerede filsystemoperationer. Typen os.Root giver mulighed for at udføre filsystemoperationer inden for en bestemt mappe og forhindrer adgang uden for den angivne sti.
Forbedringer af test
Ny pakke testing/synctest til test af samtidig kode. Funktionen synctest.Run starter en gruppe goroutines i en isoleret “boble”, og funktionen synctest.Wait venter på, at alle goroutines i den aktuelle boble blokerer. Pakken er eksperimentel og skal aktiveres ved at sætte GOEXPERIMENT=synctest på byggetidspunktet.
Build-cache
Eksekverbare filer fra go run caches nu for hurtigere eksekvering. Dette gør gentagne eksekveringer hurtigere på bekostning af en større cache.
Cgo-ydeevne
Nye annotationer #cgo noescape og #cgo nocallback for bedre Cgo-ydeevne. #cgo noescape cFunctionName fortæller compileren, at hukommelse, der sendes til C-funktionen, ikke undslipper. #cgo nocallback cFunctionName fortæller compileren, at C-funktionen ikke kalder tilbage til nogen Go-funktioner.
Svage pointere
Understøttelse af svage pointere til sikker referencering af hukommelse uden at forhindre frigivelse. Svage pointere er et lavniveau-primitiv, der er tilvejebragt for at muliggøre oprettelse af hukommelseseffektive strukturer, såsom svage maps til associering af værdier, canonicalization-maps og forskellige typer caches.
Forbedring af benchmarks
Ny metode testing.B.Loop til hurtigere og mindre fejlbehæftede benchmarks. Benchmarkfunktionen udføres præcis én gang pr. -count, så dyre opsætnings- og oprydningstrin kun udføres én gang. Funktionskaldsparametre og resultater holdes i live, hvilket forhindrer compileren i fuldt ud at optimere loop-kroppen væk.
Go 1.24 er ved at tegne sig som en betydelig udgivelse, der tilbyder væsentlige forbedringer på tværs af forskellige aspekter af sproget og dets økosystem.
