GoSuda

Was ist neu in Go 1.24?

By Lemon Mint
views ...

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

Performance Boost

Eine allgemeine Performance-Verbesserung mit einer Reduzierung des CPU-Overhead um 2-3 % über eine Reihe repräsentativer Benchmarks hinweg. Diese Verbesserungen umfassen eine neue eingebaute Map-Implementierung, eine effizientere Speicherallokation kleiner Objekte und eine neue Runtime-interne Mutex-Implementierung. Die Ergebnisse können je nach Anwendung variieren.

Post-Quantum Crypto

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

TLS Enhancement

Unterstützung für Encrypted Client Hello (ECH) in TLS. Diese Funktion kann durch das Füllen des Config.EncryptedClientHelloKeys-Feldes aktiviert werden, wodurch Privacy und Security für TLS-Verbindungen verbessert werden.

New Swiss Table Map

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

Sync Map Update

Verbesserte Performance für Map-Modifikationen in sync.Map. Modifikationen disjunkter Schlüsselmengen führen bei größeren Maps wesentlich seltener zu Contention, und es ist keine Anlaufzeit mehr erforderlich, um Low-Contention-Lasten von der Map zu erreichen. Falls Probleme auftreten, kann auf die alte Implementierung mit GOEXPERIMENT=nosynchashtriemap zurückgegriffen werden.

Enhanced JSON Marshaling

Eine neue omitempty Tag-Option für eine intelligentere Auslassung von Struct-Feldern während des JSON Marshaling. Beim Marshaling wird ein Struct-Feld mit der Option omitempty ausgelassen, wenn sein Wert Null ist. Wenn der Feldtyp eine IsZero() bool-Methode besitzt, wird diese verwendet, um zu bestimmen, ob der Wert Null ist.

Runtime Cleanup

Einführung der AddCleanup-Funktion zur Ersetzung von SetFinalizer für ein besseres Resource Management. Im Gegensatz zu SetFinalizer wird das Objekt, an das es angehängt ist, nicht zur Finalisierung wiederbelebt, und es können mehrere Cleanups an ein einzelnes Objekt angehängt werden. Neuer Code sollte AddCleanup gegenüber SetFinalizer bevorzugen.

Tool Directives in go.mod

Verbessertes Tracking von ausführbaren Abhängigkeiten durch die Verwendung von Tool-Directives in go.mod. Dies eliminiert die Notwendigkeit des vorherigen Workarounds, Tools als leere Imports zu einer traditionell „tools.go“ genannten Datei hinzuzufügen.

Directory-Limited Access

Neuer os.Root-Typ für kontrollierte Dateisystemoperationen. Der os.Root-Typ bietet die Möglichkeit, Dateisystemoperationen innerhalb eines bestimmten Verzeichnisses durchzuführen und den Zugriff außerhalb des angegebenen Pfades zu verhindern.

Testing Improvements

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

Build Cache

go run-Ausführbarkeiten werden nun für eine schnellere Ausführung gecacht. Dies beschleunigt wiederholte Ausführungen auf Kosten eines größeren Caches.

Cgo Performance

Neue #cgo noescape- und #cgo nocallback-Annotationen für bessere Cgo Performance. #cgo noescape cFunctionName teilt dem Compiler mit, dass Speicher, der an die C-Funktion übergeben wird, nicht entweicht. #cgo nocallback cFunctionName teilt dem Compiler mit, dass die C-Funktion keine Rückrufe an Go-Funktionen vornimmt.

Weak Pointers

Unterstützung für Weak Pointers, um Speicher sicher zu referenzieren, ohne dessen Rückgewinnung zu verhindern. Weak Pointers sind eine Low-Level-Primitive, die die Erstellung speichereffizienter Strukturen ermöglicht, wie Weak Maps zur Assoziierung von Werten, Kanonisierungs-Maps und verschiedene Arten von Caches.

Benchmark Improvement

Neue testing.B.Loop-Methode für schnellere, weniger fehleranfällige Benchmarks. Die Benchmark-Funktion wird genau einmal pro -count ausgeführt, sodass aufwendige Setup- und Cleanup-Schritte nur einmal ausgeführt werden. Funktionsaufrufparameter und -ergebnisse bleiben erhalten, wodurch der Compiler nicht in der Lage ist, den Schleifenkörper vollständig zu optimieren.

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

Overview of Go 1.24