Hva er nytt i Go 1.24?
Go 1.24 er i ferd med å bli en betydelig utgivelse, som introduserer en rekke forbedringer fokusert på ytelse, sikkerhet og utvikleropplevelse. Disse endringene tar sikte på å gjøre Go enda kraftigere og mer effektivt for å bygge moderne applikasjoner.
Ytelsesforbedring
En generell ytelsesforbedring med en 2-3 % reduksjon i CPU-overhead på tvers av en rekke representative benchmarks. Disse forbedringene inkluderer en ny innebygd map-implementasjon, mer effektiv minnetildeling av små objekter, og en ny runtime-intern mutex-implementasjon. Resultatene kan variere avhengig av applikasjonen.
Post-Quantum Crypto
Introduksjon av pakken crypto/mlkem
, som implementerer ML-KEM-768 og ML-KEM-1024. ML-KEM er en post-quantum nøkkelutvekslingsmekanisme tidligere kjent som Kyber og spesifisert i FIPS 203. Dette tillegget forbereder Go for fremtiden innen kryptografisk sikkerhet.
TLS-forbedring
Støtte for Encrypted Client Hello (ECH) i TLS. Denne funksjonen kan aktiveres ved å fylle ut feltet Config.EncryptedClientHelloKeys
, noe som forbedrer personvern og sikkerhet for TLS-forbindelser.
Nytt Swiss Table Map
En forbedret map-implementasjon for bedre ytelse. Denne nye implementasjonen er basert på Swiss Tables, og kan deaktiveres med build-flagget GOEXPERIMENT=noswissmap
.
Sync Map-oppdatering
Forbedret ytelse for map-modifikasjoner i sync.Map
. Modifikasjoner av disjunkte sett med nøkler er mye mindre sannsynlig å skape konkurranse på større maps, og det er ikke lenger nødvendig med noen oppstartstid for å oppnå lav-konkurranse belastninger fra map-et. Hvis du opplever problemer, kan du gå tilbake til den gamle implementasjonen ved å bruke GOEXPERIMENT=nosynchashtriemap
.
Forbedret JSON Marshaling
Et nytt omitempty
tag-alternativ for smartere utelatelse av struct-felt under JSON marshaling. Ved marshaling vil et struct-felt med omitempty
-alternativet utelates hvis verdien er null. Hvis felttypen har en IsZero() bool
-metode, vil denne brukes til å bestemme om verdien er null.
Runtime-opprydding
Introduksjon av funksjonen AddCleanup
for å erstatte SetFinalizer
for bedre ressursstyring. I motsetning til SetFinalizer
gjenoppliver den ikke objektet den er knyttet til for finalisering, og flere oppryddinger kan knyttes til et enkelt objekt. Ny kode bør foretrekke AddCleanup
fremfor SetFinalizer
.
Verktøydirektiver i go.mod
Forbedret sporing av kjørbare avhengigheter ved hjelp av verktøydirektiver i go.mod
. Dette fjerner behovet for den tidligere omgåelsen med å legge til verktøy som blanke importer til en fil som konvensjonelt ble kalt "tools.go".
Katalogbegrenset tilgang
Ny os.Root
-type for kontrollerte filsystemoperasjoner. Typen os.Root
gir mulighet til å utføre filsystemoperasjoner innenfor en spesifikk katalog, og forhindrer tilgang utenfor den angitte banen.
Testforbedringer
Ny testing/synctest
-pakke for testing av samtidig kode. Funksjonen synctest.Run
starter en gruppe goroutiner i en isolert "boble", og funksjonen synctest.Wait
venter på at alle goroutiner i den nåværende boblen skal blokkere. Denne pakken er eksperimentell og må aktiveres ved å sette GOEXPERIMENT=synctest
ved bygging.
Byggebuffer
go run
-kjørbare filer er nå bufret for raskere utførelse. Dette gjør gjentatte utførelser raskere på bekostning av et større cache.
Cgo-ytelse
Nye #cgo noescape
og #cgo nocallback
-annoteringer for bedre Cgo-ytelse. #cgo noescape cFunctionName
forteller kompilatoren at minne som sendes til C-funksjonen ikke rømmer. #cgo nocallback cFunctionName
forteller kompilatoren at C-funksjonen ikke kaller tilbake til noen Go-funksjoner.
Svake pekere
Støtte for svake pekere for å trygt referere minne uten å forhindre frigjøring. Svake pekere er en lavnivå primitiv som er gitt for å muliggjøre opprettelse av minneeffektive strukturer, for eksempel svake maps for å assosiere verdier, kanoniseringsmaps og ulike typer caches.
Benchmark-forbedring
Ny testing.B.Loop
-metode for raskere, mindre feilutsatte benchmarks. Benchmark-funksjonen vil utføres nøyaktig én gang per -count
, slik at kostbare oppsett- og oppryddingstrinn kun utføres én gang. Funksjonskallparametere og resultater holdes i live, noe som forhindrer kompilatoren fra å fullt optimalisere bort løkkekroppen.
Go 1.24 er i ferd med å bli en betydelig utgivelse, som tilbyr betydelige forbedringer i ulike aspekter av språket og dets økosystem.