---
id: 149c0672eec2caba57477612564e9368
author: Lemon Mint
title: 'Go 1.24 Release Overview: Swiss-Table-Maps, ML-KEM, os.Root und testing/synctest'
description: 'Technische Übersicht zu Go 1.24: Built-in-Maps auf Basis von Swiss Tables, crypto/mlkem (FIPS 203), TLS Encrypted Client Hello, runtime.AddCleanup, os.Root und testing/synctest.'
language: de
date: 2024-12-20T00:23:21.60729Z
path: /blog/posts/whats-new-in-go-1-24-z83ff24d2
category: release
---

Go 1.24 entwickelt sich zu einer bedeutenden Version, die eine Reihe von Verbesserungen in den Bereichen Leistung, Sicherheit und Entwicklererfahrung einführt. Diese Änderungen zielen darauf ab, Go noch leistungsfähiger und effizienter für die Entwicklung moderner Anwendungen zu machen.

## Leistungssteigerung

Eine allgemeine Leistungsverbesserung mit einer Reduzierung des CPU-Mehraufwands um 2 bis 3 % über eine Reihe repräsentativer Benchmarks. Zu diesen Verbesserungen gehören eine neue integrierte Map-Implementierung, eine effizientere Speicherzuweisung für kleine Objekte sowie eine neue, laufzeitinterne Mutex-Implementierung. Die Ergebnisse können je nach Anwendung variieren.

## Post-Quanten-Kryptografie

Einführung des Pakets `crypto/mlkem`, das ML-KEM-768 und ML-KEM-1024 implementiert. ML-KEM ist ein Post-Quanten-Schlüsselaustauschverfahren, das früher als Kyber bekannt war und in FIPS 203 spezifiziert ist. Diese Ergänzung bereitet Go auf die Zukunft der kryptografischen Sicherheit vor.

## TLS-Erweiterung

Unterstützung für Encrypted Client Hello (ECH) in TLS. Diese Funktion kann durch Setzen des Feldes `Config.EncryptedClientHelloKeys` aktiviert werden und verbessert die Privatsphäre und Sicherheit von TLS-Verbindungen.

## Neue Swiss-Table-Map

Eine verbesserte Map-Implementierung für bessere Leistung. Diese neue Implementierung basiert auf Swiss Tables und kann mit dem Build-Flag `GOEXPERIMENT=noswissmap` deaktiviert werden.

## Aktualisierung von sync.Map

Verbesserte Leistung bei Map-Änderungen in `sync.Map`. Änderungen an disjunkten Schlüsselmengen führen bei größeren Maps deutlich seltener zu Konflikten, und es ist nicht mehr eine Anlaufzeit erforderlich, um eine konfliktarme Lastverteilung aus der Map zu erreichen. Bei Problemen kann mithilfe von `GOEXPERIMENT=nosynchashtriemap` auf die alte Implementierung zurückgewechselt werden.

## Erweitertes JSON-Marshaling

Eine neue Tag-Option `omitempty` zur intelligenteren Auslassung von Struct-Feldern beim JSON-Marshaling. Beim Marshaling wird ein Struct-Feld mit der Option `omitempty` ausgelassen, wenn sein Wert null ist. Besitzt der Feldtyp eine Methode `IsZero() bool`, wird diese verwendet, um zu bestimmen, ob der Wert null ist.

## Laufzeit-Bereinigung

Einführung der Funktion `AddCleanup` als Ersatz für `SetFinalizer` zur besseren Ressourcenverwaltung. Anders als `SetFinalizer` belebt sie das Objekt, an das sie angehängt ist, zur Finalisierung nicht wieder, und einem einzelnen Objekt können mehrere Bereinigungsfunktionen zugeordnet werden. Neuer Code sollte `AddCleanup` gegenüber `SetFinalizer` bevorzugen.

## Tool-Direktiven in go.mod

Verbesserte Verfolgung ausführbarer Abhängigkeiten mithilfe von Tool-Direktiven in `go.mod`. Dadurch entfällt die bisherige Umgehungslösung, Tools als Blank-Imports in einer üblicherweise „tools.go“ genannten Datei einzubinden.

## Auf Verzeichnisse beschränkter Zugriff

Neuer Typ `os.Root` für kontrollierte Dateisystemoperationen. Der Typ `os.Root` ermöglicht es, Dateisystemoperationen innerhalb eines bestimmten Verzeichnisses auszuführen und verhindert so den Zugriff außerhalb des angegebenen Pfads.

## Verbesserungen beim Testen

Neues Paket `testing/synctest` zum Testen von nebenläufigem Code. Die Funktion `synctest.Run` startet eine Gruppe von Goroutinen in einer isolierten „Blase“, und die Funktion `synctest.Wait` wartet, bis alle Goroutinen in der aktuellen Blase blockiert sind. Dieses Paket ist experimentell und muss zur Build-Zeit durch Setzen von `GOEXPERIMENT=synctest` aktiviert werden.

## Build-Cache

Ausführbare Dateien von `go run` werden nun zwischengespeichert, um die Ausführung zu beschleunigen. Dadurch werden wiederholte Ausführungen schneller, auf Kosten eines größeren Caches.

## Cgo-Leistung

Neue Annotationen `#cgo noescape` und `#cgo nocallback` für eine bessere Cgo-Leistung. `#cgo noescape cFunctionName` teilt dem Compiler mit, dass der an die C-Funktion übergebene Speicher nicht entweicht. `#cgo nocallback cFunctionName` teilt dem Compiler mit, dass die C-Funktion keine Go-Funktionen zurückruft.

## Schwache Zeiger

Unterstützung für schwache Zeiger, um Speicher sicher zu referenzieren, ohne dessen Freigabe zu verhindern. Schwache Zeiger sind ein Primitiv niedriger Ebene, das die Erstellung speichereffizienter Strukturen ermöglichen soll, etwa schwache Maps zur Zuordnung von Werten, Maps zur Kanonikalisierung und verschiedene Arten von Caches.

## Verbesserung von Benchmarks

Neue Methode `testing.B.Loop` für schnellere und weniger fehleranfällige Benchmarks. Die Benchmark-Funktion wird pro `-count` genau einmal ausgeführt, sodass aufwendige Setup- und Bereinigungsschritte nur einmal ausgeführt werden. Parameter und Ergebnisse von Funktionsaufrufen bleiben am Leben, wodurch verhindert wird, dass der Compiler den Schleifenkörper vollständig wegoptimiert.

Go 1.24 entwickelt sich zu einer bedeutenden Version, die substanzielle Verbesserungen in verschiedenen Aspekten der Sprache und ihres Ökosystems bietet.

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