Go 1.25 veröffentlicht
(go.dev)Go 1.25 wurde offiziell veröffentlicht. Diese Version enthält Verbesserungen in den Bereichen Tools, Runtime, Compiler und Standardbibliothek und führt insbesondere wichtige experimentelle Funktionen ein, die Nutzer vorab ausprobieren und zu denen sie Feedback geben können.
- Wichtigste Merkmale:
- Beibehaltung der Kompatibilität mit Go 1
- Umfassende Verbesserungen bei Tools, Runtime, Compiler und Bibliotheken
- Einführung neuer experimenteller Funktionen (GreenTea GC, Paket json/v2)
Zentrale experimentelle Funktionen
Go 1.25 enthält zwei wichtige experimentelle Funktionen zur Verbesserung von Performance und Funktionsumfang, die Nutzer über Umgebungsvariablen aktivieren können.
Neuer GreenTea Garbage Collector (GC)
Ziel ist es, die Performance zu verbessern, indem der GC-Overhead beim Verarbeiten zahlreicher kleiner Objekte reduziert wird.
- Funktionsweise: Kleine Objekte unter 512 Byte werden für den GC in 8-KiB großen „Memory Span“-Einheiten gruppiert. Dadurch wird die Speicherlokalität erhöht und die Effizienz des CPU-Caches maximiert.
- Erwartete Effekte:
- Verbesserte GC-Performance durch geringere Kosten für Speicher-Sprünge
- Effizienter Betrieb in Multi-Core-Umgebungen
- Weniger Overhead bei der Allokation kleiner Objekte und geringere Speicherfragmentierung
- Aktivierung: Beim Build die Umgebungsvariable
GOEXPERIMENT=greenteagcsetzen
Neues Paket encoding/json/v2
Dies ist eine neu entworfene JSON-Implementierung, die Inkonsistenzen, schwer vorhersagbares Verhalten und Performance-Probleme von encoding/json (v1) beheben soll.
-
Zentrale Ziele:
- Höhere Korrektheit und Vorhersagbarkeit: Standardmäßig gelten strengere Regeln, etwa Groß-/Kleinschreibung und das Verbot doppelter Schlüssel, um unerwartetes Verhalten zu reduzieren.
- Bessere Performance: Die Parsing- und Encoding-Engine wurde neu entwickelt, um die Effizienz zu steigern.
- Mehr Flexibilität und Kontrolle: Ein ausgefeiltes Optionssystem ermöglicht es Entwicklern, die JSON-Verarbeitung fein granular zu steuern.
-
Wichtige Änderungen (v2 gegenüber v1):
- Abgleich von Feldnamen: Anders als v1, das Groß- und Kleinschreibung nicht unterschied, ist v2 standardmäßig streng case-sensitive.
- Geänderte Bedeutung des
omitempty-Tags: Während v1 anhand des „leeren Zustands“ von Go-Werten (0, false, nil usw.) ausließ, lässt v2 anhand des „leeren Zustands“ des encodierten JSON-Werts (null,"",{},[]) aus. - Behandlung von
nil-Slices und -Maps: v1 marshalt diese alsnull, v2 dagegen standardmäßig als[](leeres Array) bzw.{}(leeres Objekt). - Array-Unmarshaling: v1 akzeptierte unterschiedliche Längen von JSON-Array und Go-Array, v2 verlangt, dass die Längen exakt übereinstimmen; andernfalls wird ein Fehler zurückgegeben.
- Behandlung doppelter Schlüssel: v1 erlaubte doppelte Schlüssel (der letzte Wert überschreibt), v2 gibt standardmäßig einen Fehler zurück und verbessert damit Korrektheit und Sicherheit.
- Umgang mit ungültigem UTF-8: v1 ersetzte ungültige UTF-8-Zeichen automatisch durch
\uFFFD, v2 gibt standardmäßig einen Fehler zurück, um Datenbeschädigung zu vermeiden.
-
Neue Funktionen und Struktur:
- Modulare Struktur: Low-Level-Syntaxanalyse (
jsontext-Paket) und semantische High-Level-Transformation (json/v2-Paket) wurden getrennt, um Klarheit und Performance zu verbessern. - Leistungsfähiges Optionssystem: Mit
json.Optionslässt sich verschiedenes Verhalten fein steuern; auch das Verhalten von v1 kann vollständig reproduziert werden. - Behandlung externer Typen: Über die Optionen
WithMarshalersundWithUnmarshalerslässt sich Serialisierungs-/Deserialisierungslogik für Typen aus externen Paketen injizieren, die keineMarshaler-/Unmarshaler-Interfaces implementieren.
- Modulare Struktur: Low-Level-Syntaxanalyse (
-
Aktivierung: Beim Build die Umgebungsvariable
GOEXPERIMENT=jsonv2setzen
Wichtige Änderungen und Verbesserungen
Dieses Release bringt zahlreiche Verbesserungen zur Steigerung der Entwicklungsproduktivität und der Effizienz bei der Programmausführung.
-
Runtime
- Container-bewusstes GOMAXPROCS: Unter Linux werden CPU-Limits von cgroups automatisch erkannt, um den Standardwert von
GOMAXPROCSzu setzen; bei Änderungen der CPU-Ressourcen wird dieser Wert dynamisch aktualisiert. - Trace Flight Recorder: Eine leichtgewichtige Tracing-Funktion, die Runtime-Traces kontinuierlich in einen Ringpuffer im Speicher schreibt, um seltene Bugs zu debuggen.
- Container-bewusstes GOMAXPROCS: Unter Linux werden CPU-Limits von cgroups automatisch erkannt, um den Standardwert von
-
Tools & Compiler
- Behebung eines nil-Pointer-Bugs: Ein seit Go 1.21 vorhandener Compiler-Bug, der nil-Pointer-Prüfungen verzögerte, wurde behoben. Code, der zuvor fälschlich erfolgreich lief, löst jetzt korrekt eine Panic aus.
- DWARF5-Unterstützung: Für Debug-Informationen wird DWARF Version 5 verwendet, wodurch Binärgrößen und Link-Zeiten reduziert werden.
- Neue
go.mod ignore-Direktive: Damit kann dergo-Befehl angewiesen werden, bestimmte Verzeichnisse zu ignorieren.
-
Standardbibliothek
- Paket
testing/synctesthinzugefügt: Ein neues Paket zur Unterstützung von Tests für nebenläufigen Code, das Tests isoliert in virtualisierter Zeit ausführen kann. - Performance-Verbesserungen im Paket
crypto: Im FIPS-Modus sindecdsa- unded25519-Signaturen viermal schneller, auch die SHA-Hashing-Geschwindigkeit wurde verbessert. net/httpCrossOriginProtection hinzugefügt: Eine neue Funktion zur Abwehr von CSRF-Angriffen mithilfe der Fetch-Metadaten moderner Browser.
- Paket
Änderungen bei Ports und Support
- macOS: Ab Go 1.25 ist mindestens macOS 12 Monterey erforderlich.
- Windows: Der 32-Bit-Port
windows/armwird mit diesem Release letztmals unterstützt.
Noch keine Kommentare.