GoSuda

Hva er nytt i Go 1.24?

By Lemon Mint
views ...

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.

Oversikt over Go 1.24