GoSuda

Hvad er nyt i Go 1.24?

By Lemon Mint
views ...

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.

Oversigt over Go 1.24