---
id: 149c0672eec2caba57477612564e9368
author: Lemon Mint
title: 'Oversikt over Go 1.24: Swiss Table-kart, ML-KEM, os.Root og testing/synctest'
description: 'Teknisk oversikt over Go 1.24: innebygde kart basert på Swiss Table, crypto/mlkem (FIPS 203), TLS Encrypted Client Hello, runtime.AddCleanup, os.Root og testing/synctest.'
language: "no"
date: 2024-12-20T00:23:21.60729Z
path: /blog/posts/whats-new-in-go-1-24-z83ff24d2
category: release
---

Go 1.24 utvikler seg til å bli en betydelig utgivelse, som introduserer en rekke forbedringer med fokus på ytelse, sikkerhet og utvikleropplevelse. Disse endringene har som mål å gjøre Go enda kraftigere og mer effektiv for bygging av moderne applikasjoner.

## Ytelsesløft

En generell ytelsesforbedring med en reduksjon i CPU-overhead på 2–3 % på tvers av et sett med representative benchmarker. Forbedringene omfatter en ny innebygd implementasjon av map, mer effektiv minneallokering for små objekter, og en ny runtime-intern mutex-implementasjon. Resultatene kan variere avhengig av applikasjon.

## Post-kvantekryptografi

Introduksjon av pakken `crypto/mlkem`, som implementerer ML-KEM-768 og ML-KEM-1024. ML-KEM er en post-kvantemekanisme for nøkkelutveksling, tidligere kjent som Kyber og spesifisert i FIPS 203. Dette tillegget forbereder Go for fremtidens kryptografiske sikkerhet.

## TLS-forbedring

Støtte for Encrypted Client Hello (ECH) i TLS. Denne funksjonen kan aktiveres ved å fylle ut feltet `Config.EncryptedClientHelloKeys`, noe som styrker personvernet og sikkerheten for TLS-forbindelser.

## Ny Swiss Table-map

En forbedret implementasjon av map for bedre ytelse. Denne nye implementasjonen er basert på Swiss Tables, og kan deaktiveres med build-flagget `GOEXPERIMENT=noswissmap`.

## Oppdatering av sync.Map

Forbedret ytelse for modifikasjoner av map i `sync.Map`. Modifikasjoner av disjunkte nøkkelsett er betydelig mindre utsatt for konkurranse på større map, og det er ikke lenger nødvendig med en oppstartsfase for å oppnå lavkonkurranse-lastinger fra map. Dersom du støter på problemer, kan du gå tilbake til den gamle implementasjonen ved å bruke `GOEXPERIMENT=nosynchashtriemap`.

## Forbedret JSON-marshaling

En ny valgfri `omitempty`-tagg for smartere utelating av struct-felt under JSON-marshaling. Ved marshaling vil et struct-felt med alternativet `omitempty` utelates dersom verdien er null. Dersom feltets type har en metode `IsZero() bool`, vil denne brukes for å avgjøre 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 opprydningsfunksjoner kan knyttes til ett 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 løsningen med å legge til verktøy som blanke importer i en fil som konvensjonelt heter «tools.go».

## Katalogbegrenset tilgang

Ny type `os.Root` for kontrollerte filsystemoperasjoner. Typen `os.Root` gir muligheten til å utføre filsystemoperasjoner innenfor en bestemt katalog, og forhindrer tilgang utenfor den angitte banen.

## Forbedringer av testing

Ny pakke `testing/synctest` for testing av samtidig kode. Funksjonen `synctest.Run` starter en gruppe goroutiner i en isolert «boble», og funksjonen `synctest.Wait` venter til alle goroutiner i den gjeldende boblen er blokkert. Denne pakken er eksperimentell og må aktiveres ved å sette `GOEXPERIMENT=synctest` ved bygging.

## Build-cache

Kjørbare filer fra `go run` caches nå for raskere kjøring. Dette gjør gjentatte kjøringer raskere på bekostning av at cachen blir større.

## Cgo-ytelse

Nye annoteringer `#cgo noescape` og `#cgo nocallback` for bedre Cgo-ytelse. `#cgo noescape cFunctionName` forteller kompilatoren at minne sendt til C-funksjonen ikke unnslipper. `#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 til minne uten å hindre frigjøring. Svake pekere er en lavnivåprimitiv som er laget for å muliggjøre minneeffektive strukturer, som svake map for å knytte verdier sammen, kanoniseringsmap og ulike typer cacher.

## Benchmark-forbedring

Ny metode `testing.B.Loop` for raskere og mindre feilutsatte benchmarker. Benchmark-funksjonen vil kjøres nøyaktig én gang per `-count`, slik at kostbare oppsett- og oppryddingstrinn kjøres bare én gang. Funksjonskallparametere og resultater holdes i live, noe som hindrer kompilatoren i å optimalisere bort løkkekroppen fullstendig.

Go 1.24 utvikler seg til å bli en betydelig utgivelse, og tilbyr vesentlige forbedringer på tvers av ulike aspekter ved språket og økosystemet.

![Oversikt over Go 1.24](/assets/images/whats-new-in-go1.24/overview.webp)
