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

Go 1.24 er ved at tegne sig som en betydelig udgivelse, der introducerer en række forbedringer med fokus på ydeevne, sikkerhed og udvikleroplevelse. Disse ændringer har til formål at gøre Go endnu kraftigere og mere effektiv til udvikling af moderne applikationer.

## Ydelsesforbedring

En generel ydelsesforbedring med en reduktion af CPU-overhead på 2-3 % på tværs af en række repræsentative benchmarks. Forbedringerne omfatter en ny indbygget map-implementering, mere effektiv allokering af hukommelse til små objekter og en ny runtime-intern mutex-implementering. Resultaterne kan variere afhængigt af applikationen.

## Post-Quantum Kryptografi

Introduktion af pakken `crypto/mlkem`, der implementerer ML-KEM-768 og ML-KEM-1024. ML-KEM er en post-kvante nøgleudvekslingsmekanisme, tidligere kendt som Kyber, og specificeret i FIPS 203. Denne tilføjelse forbereder Go til fremtidens kryptografiske sikkerhed.

## TLS-forbedring

Understøttelse af Encrypted Client Hello (ECH) i TLS. Denne funktion kan aktiveres ved at udfylde feltet `Config.EncryptedClientHelloKeys`, hvilket styrker privatlivets fred og sikkerheden for TLS-forbindelser.

## Ny Swiss Table Map

En forbedret map-implementering med bedre ydeevne. Denne nye implementering er baseret på Swiss Tables og kan deaktiveres med build-flaget `GOEXPERIMENT=noswissmap`.

## Opdatering af Sync Map

Forbedret ydeevne for ændringer i `sync.Map`. Ændringer af disjunkte nøglemængder har meget mindre sandsynlighed for at skabe konkurrence om låse i større maps, og der kræves ikke længere nogen opvarmningstid for at opnå belastninger med lav konkurrence fra map'et. Hvis du oplever problemer, kan du vende tilbage til den gamle implementering ved at bruge `GOEXPERIMENT=nosynchashtriemap`.

## Forbedret JSON-marshaling

En ny tagindstilling `omitempty` til smartere udeladelse af struct-felter under JSON-marshaling. Ved marshaling udelades et struct-felt med indstillingen `omitempty`, hvis dets værdi er nulværdien. Hvis feltets type har en metode `IsZero() bool`, bruges den til at afgøre, om værdien er nul.

## Oprydning under runtime

Introduktion af funktionen `AddCleanup` til at erstatte `SetFinalizer` for bedre ressourcehåndtering. I modsætning til `SetFinalizer` genopliver den ikke det objekt, den er knyttet til, til finalisering, og flere cleanups 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 hjælp af værktøjsdirektiver i `go.mod`. Dette fjerner behovet for den tidligere løsning med at tilføje værktøjer som blank imports i en fil, der konventionelt hedder “tools.go”.

## Begrænset adgang til mapper

Ny type `os.Root` til kontrollerede filsystemoperationer. Typen `os.Root` giver mulighed for at udføre filsystemoperationer inden for en bestemt mappe og forhindrer adgang uden for den angivne sti.

## Forbedringer af test

Ny pakke `testing/synctest` 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. Pakken er eksperimentel og skal aktiveres ved at sætte `GOEXPERIMENT=synctest` på byggetidspunktet.

## Build-cache

Eksekverbare filer fra `go run` caches nu for hurtigere eksekvering. Dette gør gentagne eksekveringer hurtigere på bekostning af en større cache.

## Cgo-ydeevne

Nye annotationer `#cgo noescape` og `#cgo nocallback` for bedre Cgo-ydeevne. `#cgo noescape cFunctionName` fortæller compileren, at hukommelse, der sendes til C-funktionen, ikke undslipper. `#cgo nocallback cFunctionName` fortæller compileren, at C-funktionen ikke kalder tilbage til nogen Go-funktioner.

## Svage pointere

Understøttelse af svage pointere til sikker referencering af hukommelse uden at forhindre frigivelse. Svage pointere er et lavniveau-primitiv, der er tilvejebragt for at muliggøre oprettelse af hukommelseseffektive strukturer, såsom svage maps til associering af værdier, canonicalization-maps og forskellige typer caches.

## Forbedring af benchmarks

Ny metode `testing.B.Loop` til hurtigere og mindre fejlbehæftede benchmarks. Benchmarkfunktionen udføres præcis én gang pr. `-count`, så dyre opsætnings- og oprydningstrin kun udføres én gang. Funktionskaldsparametre og resultater holdes i live, hvilket forhindrer compileren i fuldt ud at optimere loop-kroppen væk.

Go 1.24 er ved at tegne sig som en betydelig udgivelse, der tilbyder væsentlige forbedringer på tværs af forskellige aspekter af sproget og dets økosystem.

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