Was ist neu in Go 1.24?
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.