---
id: 149c0672eec2caba57477612564e9368
author: Lemon Mint
title: 'Översikt över Go 1.24: Swiss Table-kartor, ML-KEM, os.Root och testing/synctest'
description: 'Teknisk översikt av Go 1.24: inbyggda maps baserade på Swiss Table, crypto/mlkem (FIPS 203), TLS Encrypted Client Hello, runtime.AddCleanup, os.Root och testing/synctest.'
language: sv
date: 2024-12-20T00:23:21.60729Z
path: /blog/posts/whats-new-in-go-1-24-z83ff24d2
category: release
---

Go 1.24 utvecklas till en betydande version som introducerar en rad förbättringar med fokus på prestanda, säkerhet och utvecklarupplevelse. Dessa förändringar syftar till att göra Go ännu kraftfullare och mer effektivt för att bygga moderna applikationer.

## Prestandaförbättring

En generell prestandaförbättring med en minskning av CPU-overhead med 2–3 procent över en svit av representativa benchmarks. Förbättringarna omfattar en ny inbyggd implementation av map, mer effektiv minnesallokering för små objekt och en ny runtime-intern mutex-implementation. Resultaten kan variera beroende på applikation.

## Postkvantkryptografi

Introduktion av paketet `crypto/mlkem`, som implementerar ML-KEM-768 och ML-KEM-1024. ML-KEM är en postkvantmekanism för nyckelutbyte, tidigare känd som Kyber och specificerad i FIPS 203. Detta tillägg förbereder Go för framtidens kryptografiska säkerhet.

## TLS-förbättring

Stöd för Encrypted Client Hello (ECH) i TLS. Funktionen aktiveras genom att fylla i fältet `Config.EncryptedClientHelloKeys`, vilket stärker integritet och säkerhet för TLS-anslutningar.

## Ny Swiss Table-map

En förbättrad implementation av map för bättre prestanda. Den nya implementationen baseras på Swiss Tables och kan inaktiveras med build-flaggan `GOEXPERIMENT=noswissmap`.

## Uppdatering av sync.Map

Förbättrad prestanda för modifieringar av map i `sync.Map`. Modifieringar av disjunkta uppsättningar nycklar är betydligt mindre benägna att konkurrera om resurser i större maps, och det krävs inte längre någon uppvärmningstid för att uppnå lågkonkurrensbelastning från mappen. Om du stöter på problem kan du återgå till den gamla implementationen med `GOEXPERIMENT=nosynchashtriemap`.

## Förbättrad JSON-marshaling

En ny taloption `omitempty` för smartare utelämnande av struct-fält vid JSON-marshaling. Vid marshaling utelämnas ett struct-fält med alternativet `omitempty` om dess värde är noll. Om fälttypen har metoden `IsZero() bool` används den för att avgöra om värdet är noll.

## Runtime-städning

Introduktion av funktionen `AddCleanup` för att ersätta `SetFinalizer` och för bättre resurshantering. Till skillnad från `SetFinalizer` återupplivar den inte objektet som den är kopplad till för finalisering, och flera cleanups kan kopplas till ett enskilt objekt. Ny kod bör föredra `AddCleanup` framför `SetFinalizer`.

## Verktygsdirektiv i go.mod

Förbättrad spårning av körbara beroenden med hjälp av verktygsdirektiv i `go.mod`. Detta eliminerar behovet av den tidigare lösningen att lägga till verktyg som blank imports i en fil som konventionellt heter “tools.go”.

## Katalogbegränsad åtkomst

Ny typ `os.Root` för kontrollerade filsystemsoperationer. Typen `os.Root` ger möjlighet att utföra filsystemsoperationer inom en specifik katalog och förhindrar åtkomst utanför den angivna sökvägen.

## Förbättringar av testning

Nytt paket `testing/synctest` för testning av samtidig kod. Funktionen `synctest.Run` startar en grupp goroutines i en isolerad “bubbla”, och funktionen `synctest.Wait` väntar tills alla goroutines i den aktuella bubblan blockeras. Paketet är experimentellt och måste aktiveras genom att sätta `GOEXPERIMENT=synctest` vid byggtid.

## Build-cache

Körbara filer från `go run` cachelagras nu för snabbare exekvering. Detta gör upprepade körningar snabbare på bekostnad av att cachen blir större.

## Cgo-prestanda

Nya annoteringar `#cgo noescape` och `#cgo nocallback` för bättre Cgo-prestanda. `#cgo noescape cFunctionName` anger för kompilatorn att minne som skickas till C-funktionen inte undkommer. `#cgo nocallback cFunctionName` anger för kompilatorn att C-funktionen inte anropar tillbaka några Go-funktioner.

## Svaga pekare

Stöd för svaga pekare för att säkert referera till minne utan att förhindra återvinning. Svaga pekare är en primitiv på lägre nivå som tillhandahålls för att möjliggöra skapandet av minneseffektiva strukturer, till exempel svaga maps för att associera värden, kanoniseringsmaps och olika typer av cacheminnen.

## Benchmark-förbättring

Ny metod `testing.B.Loop` för snabbare och mindre felbenägna benchmarks. Benchmarkfunktionen körs exakt en gång per `-count`, så att dyra steg för setup och cleanup körs endast en gång. Parametrar och resultat från funktionsanrop hålls levande, vilket förhindrar kompilatorn från att helt optimera bort loopens kropp.

Go 1.24 utvecklas till en betydande version som erbjuder väsentliga förbättringar inom olika aspekter av språket och dess ekosystem.

![Översikt över Go 1.24](/assets/images/whats-new-in-go1.24/overview.webp)
