Hvad er nyt i Go 1.24?
Go 1.24 tegner til at blive en betydelig udgivelse, der introducerer en række forbedringer med fokus på ydeevne, sikkerhed og udvikleroplevelse. Disse ændringer sigter mod at gøre Go endnu mere kraftfuld og effektiv til at bygge moderne applikationer.
Ydeevneforbedring
En generel ydeevneforbedring med en 2-3 % reduktion i CPU-overhead på tværs af en række repræsentative benchmarks. Disse forbedringer inkluderer en ny indbygget map-implementering, mere effektiv hukommelsesallokering af små objekter og en ny runtime-intern mutex-implementering. Resultater kan variere afhængigt af applikationen.
Post-Quantum Krypto
Introduktion af crypto/mlkem
pakken, der implementerer ML-KEM-768 og ML-KEM-1024. ML-KEM er en post-quantum nøgleudvekslingsmekanisme, tidligere kendt som Kyber og specificeret i FIPS 203. Denne tilføjelse forbereder Go til fremtiden inden for kryptografisk sikkerhed.
TLS-forbedring
Understøttelse af Encrypted Client Hello (ECH) i TLS. Denne funktion kan aktiveres ved at udfylde Config.EncryptedClientHelloKeys
feltet, hvilket forbedrer privatlivets fred og sikkerhed for TLS-forbindelser.
Nyt Swiss Table Map
En forbedret map-implementering for bedre ydeevne. Denne nye implementering er baseret på Swiss Tables og kan deaktiveres med GOEXPERIMENT=noswissmap
build-flagget.
Sync Map Opdatering
Forbedret ydeevne for map-modifikationer i sync.Map
. Modifikationer af adskilte sæt af nøgler er meget mindre tilbøjelige til at skabe uoverensstemmelse på større maps, og der er ikke længere nogen opstartsperiode, der kræves for at opnå lave-konfliktbelastninger fra mappet. Hvis du støder på problemer, kan du vende tilbage til den gamle implementering ved hjælp af GOEXPERIMENT=nosynchashtriemap
.
Forbedret JSON Marshaling
En ny omitempty
tag-mulighed for smartere udeladelse af struct-felter under JSON marshaling. Ved marshaling vil et struct-felt med omitempty
muligheden blive udeladt, hvis dets værdi er nul. Hvis feltets type har en IsZero() bool
metode, vil denne blive brugt til at bestemme, om værdien er nul.
Runtime Oprydning
Introduktion af AddCleanup
-funktionen til at erstatte SetFinalizer
for bedre ressourcestyring. I modsætning til SetFinalizer
genopliver den ikke det objekt, den er knyttet til, for finalisering, og flere oprydninger 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 brug af værktøjsdirektiver i go.mod
. Dette fjerner behovet for den tidligere løsning med at tilføje værktøjer som blanke imports til en fil, der konventionelt navngives "tools.go".
Begrænset Adgang til Mapper
Ny os.Root
type til kontrollerede filsystemoperationer. os.Root
typen giver mulighed for at udføre filsystemoperationer inden for en specifik mappe, hvilket forhindrer adgang uden for den angivne sti.
Testforbedringer
Ny testing/synctest
-pakke 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. Denne pakke er eksperimentel og skal aktiveres ved at sætte GOEXPERIMENT=synctest
ved byggetid.
Build Cache
go run
eksekverbare filer er nu cachelagret for hurtigere udførelse. Dette gør gentagne udførelser hurtigere på bekostning af en større cache.
Cgo Ydeevne
Nye #cgo noescape
og #cgo nocallback
annotationer for bedre Cgo-ydeevne. #cgo noescape cFunctionName
fortæller compileren, at hukommelse, der sendes til C-funktionen, ikke slipper ud. #cgo nocallback cFunctionName
fortæller compileren, at C-funktionen ikke kalder tilbage til nogen Go-funktioner.
Svage Pegepinde
Understøttelse af svage pegepinde til sikker reference til hukommelse uden at forhindre genindvinding. Svage pegepinde er en lav-niveau primitiv, der er tilvejebragt for at muliggøre oprettelse af hukommelseseffektive strukturer, såsom svage maps til at associere værdier, kanoniseringsmaps og forskellige former for caches.
Benchmark-forbedring
Ny testing.B.Loop
-metode for hurtigere, mindre fejlbehæftede benchmarks. Benchmark-funktionen vil kun udføre én gang per -count
, så dyre opsætnings- og oprydningstrin udføres kun én gang. Funktionskaldsparametre og -resultater holdes i live, hvilket forhindrer compileren i fuldt ud at optimere loop-kroppen væk.
Go 1.24 tegner til at blive en betydelig udgivelse, der tilbyder væsentlige forbedringer inden for forskellige aspekter af sproget og dets økosystem.