Experimentelle JSON-Pakete in Go 1.25: Performance-Verbesserung und strengere Syntax

2025-09-10

Go 1.25 führt experimentelle `encoding/json/v2` und `encoding/json/jsontext` Pakete ein, um Go's JSON-Kodierungs- und -Dekodierungsfunktionen zu verbessern. Diese beheben Mängel im bestehenden `encoding/json` Paket, wie z. B. ungenaue JSON-Syntaxbehandlung, Performance-Engpässe und API-Mängel. Verbesserungen umfassen strengere Behandlung von ungültigem UTF-8, doppelten Schlüsseln und null Werten in Slices/Maps. Die Stream-Verarbeitung verbessert die Performance deutlich, insbesondere das Unmarshaling. Obwohl weitgehend abwärtskompatibel, werden Entwickler aufgefordert, mit `GOEXPERIMENT=jsonv2` zu testen und Feedback zu geben.

Mehr lesen
(go.dev)
Entwicklung

Go's natives FIPS 140-3 Krypto-Modul: Eine sichere und einfache Lösung

2025-07-16

Go 1.24 und spätere Versionen unterstützen jetzt nativ die FIPS 140-3-Compliance durch ein neues, in Zusammenarbeit mit Geomys entwickeltes kryptografisches Modul. Dieses Modul, validiert durch das CAVP-Zertifikat A6650 und in der CMVP-Prüfung, beseitigt frühere Reibungspunkte für Go-Benutzer in regulierten Umgebungen. Es bietet eine nahtlose Entwicklererfahrung mit kompromissloser Sicherheit, wobei ein optimiertes ECDSA und ein NIST DRBG basierend auf AES-256-CTR verwendet werden. Es unterstützt eine breite Palette von Plattformen und Algorithmen und übertrifft die Fähigkeiten und Sicherheit seines Vorgängers, Go+BoringCrypto. Dieses native Modul bietet den einfachsten und sichersten Weg zur FIPS 140-3-Compliance für Go-Entwickler.

Mehr lesen
(go.dev)
Entwicklung Krypto-Modul

Go Generics: Geschickte Verwendung generischer Interfaces für effiziente und adaptive Baumstrukturen

2025-07-10

Dieser Artikel untersucht die erweiterte Verwendung generischer Interfaces in Go, insbesondere wie man Typbeschränkungen beim Erstellen von Datenstrukturen wie binären Suchbäumen elegant mit selbstanzeigenden generischen Interfaces handhabt. Anhand einer Baumstruktur werden drei Implementierungsansätze verglichen: die Verwendung von `cmp.Ordered`, einer benutzerdefinierten Vergleichsfunktion und eines selbstanzeigenden generischen Interfaces. Schließlich geht der Artikel auf die Kombination von `comparable`-Einschränkungen zur Erstellung geordneter Mengen und die Vermeidung von Komplexitäten durch Pointer-Receiver ein und empfiehlt, Einfachheit und Lesbarkeit im Design zu priorisieren.

Mehr lesen
(go.dev)
Entwicklung

Go's Fehlerbehandlungssaga: Das Ende eines Syntaxkriegs

2025-06-03

Nach jahrelangen Versuchen, die ausführliche Fehlerbehandlung in Go zu verbessern, hat das Go-Team beschlossen, die Bemühungen zur Änderung der Sprachsyntax aufzugeben. Vorschläge wie "check/handle", "try" und der "?"-Operator konnten keinen breiten Konsens erzielen. Der Artikel beschreibt diese Geschichte und erklärt die Entscheidung aufgrund des fehlenden Konsenses, hoher Implementierungskosten und der Angemessenheit bestehender Ansätze. Das Team argumentiert, dass die Fokussierung auf bessere Mechanismen und Tools zur Fehlerbehandlung produktiver ist als die Suche nach syntaktischem Zucker, wobei Praktikabilität und Lesbarkeit gegenüber der Kürze des Codes betont werden.

Mehr lesen
(go.dev)
Entwicklung

Go 1.25 entfernt Core-Typen und vereinfacht die Sprachspezifikation

2025-03-26

Go 1.18 führte Generics ein und damit den Begriff "Core-Typen", um die Behandlung generischer Operanden zu vereinfachen. Dies führte jedoch zu Komplexität in der Sprachspezifikation und beschränkte die Flexibilität bestimmter Operationen. Go 1.25 entfernt Core-Typen und ersetzt sie durch klarere und prägnantere Regeln. Dies vereinfacht die Sprachspezifikation und ermöglicht zukünftige Verbesserungen, wie leistungsfähigere Slice-Operationen und verbesserte Typinferenz. Diese Änderung hat keinen Einfluss auf das Verhalten bestehender Go-Programme.

Mehr lesen
(go.dev)
Entwicklung Sprachspezifikation

Go 1.24 verbessert Wasm-Funktionen: WASI-Reaktoren und exportierte Funktionen

2025-02-14

Go 1.24 verbessert die WebAssembly (Wasm)-Unterstützung erheblich durch die Einführung der Direktive `go:wasmexport` und die Möglichkeit, WASI-Reaktoren zu erstellen. Dies ermöglicht es Go-Entwicklern, Funktionen nach Wasm zu exportieren und so eine nahtlose Integration mit Host-Anwendungen zu erreichen. Der neue WASI-Reaktor-Modus erleichtert die kontinuierliche Ausführung von Wasm-Modulen, die auf mehrere Ereignisse oder Anfragen reagieren können, ohne neu initialisiert werden zu müssen. Obwohl Einschränkungen wie die Single-Threaded-Architektur von Wasm und Typbeschränkungen bestehen, ebnen die Verbesserungen von Go 1.24 den Weg für leistungsfähigere und vielseitigere Go-basierte Wasm-Anwendungen.

Mehr lesen
(go.dev)
Entwicklung

Go Protobufs neue Opaque API verbessert Performance und Sicherheit

2024-12-16

Das Go-Team hat eine neue Opaque API für Go Protobuf veröffentlicht, die neben der bestehenden Open Struct API existiert. Diese neue API entkoppelt den generierten Code von seiner zugrundeliegenden Speicherrepräsentation, was zu Performance-Verbesserungen, reduzierten Speicherzuweisungen und Optimierungen wie Lazy Decoding führt. Durch das Verbergen der Strukturfelder und den Zugriff nur über Accessor-Methoden werden pointerbezogene Fehler und versehentliches Teilen verhindert. Die Migration beinhaltet das Aktivieren der Hybrid API, die Verwendung des `open2opaque` Tools und den Wechsel zur Opaque API. Die bestehende Open Struct API wird weiterhin unterstützt.

Mehr lesen
(go.dev)
Entwicklung