- Zum 16. Jahrestag der Open-Source-Veröffentlichung der Programmiersprache Go werden die wichtigsten technischen Fortschritte des vergangenen Jahres und die künftigen Pläne zusammengefasst
- In den Versionen Go 1.24 und 1.25 wurden umfassende Verbesserungen bei Tests, Sicherheit und Performance umgesetzt
- Mit
synctest, container-aware scheduling und flight recorder wurden Zuverlässigkeit und Effizienz in Produktionsumgebungen verbessert
- Durch die Vorbereitung auf die FIPS-140-3-Zertifizierung der Kryptografie-Pakete und den Green Tea GC wurden Sicherheit und Leistung weiter gesteigert
- Das Go-Ökosystem erweitert sich um KI-integrierte Entwicklung und moderne Code-Automatisierung; künftig sind stärkere Unterstützung für große Hardware und KI geplant
Go zum 16. Jubiläum und Überblick über die jüngsten Releases
- Am 10. November wurde der 16. Jahrestag der Open-Source-Veröffentlichung von Go gefeiert
- Im Februar 2024 erschien Go 1.24, im August Go 1.25 im regulären Release-Zyklus
- Beide Versionen umfassen APIs für die Entwicklung zuverlässiger Software, mehr Sicherheit und Verbesserungen der Runtime-Performance
- Das Go-Team treibt als Reaktion auf die Veränderungen im Zeitalter der generativen KI die Entwicklung von KI-Integration, Agenten und Infrastruktur auf Basis von Go voran
Wichtige Verbesserungen an Sprache und Standardbibliothek
- Das Paket
testing/synctest, das in Go 1.24 experimentell eingeführt und in 1.25 stabilisiert wurde, vereinfacht das Testen von asynchronem und parallelem Code
- Durch Virtualisierung der Zeit werden langsame oder instabile Tests in zuverlässige, sofort ausführbare Tests verwandelt
- Die Struktur ist tief in die Go-Runtime und die Standardbibliothek integriert
- Die API
testing.B.Loop verbessert die Nutzbarkeit der bisherigen Benchmark-API (B.N) und beseitigt klassische Fallstricke
- Es wurden
Context-basierte APIs für Test-Bereinigung und Log-Ausgabe ergänzt, was die Effizienz des Testmanagements erhöht
- Go 1.25 führt container-aware scheduling ein und passt Parallelität innerhalb von Containern automatisch an
- Dadurch werden CPU-Throttling vermieden und Latenzen verbessert
- Die Funktion flight recorder erweitert den Execution Tracer, sodass die Ereignisse unmittelbar vor einem Fehler detailliert aufgezeichnet werden können
Sicherheitsorientierte Softwareentwicklung
- Bei einem Audit der Kryptografie-Pakete von Go durch das unabhängige Sicherheitsunternehmen Trail of Bits wurde nur ein einzelnes Problem mit niedriger Schwere gefunden
- In Zusammenarbeit des Go Security Teams mit Geomys wurde die CAVP-Zertifizierung erreicht und die Vorbereitung auf die FIPS-140-3-Zertifizierung abgeschlossen
- Das erhöht die Eignung von Go in regulierten Umgebungen und beseitigt die Abhängigkeit von bisherigen inoffiziellen Lösungen
- Die Go-Standardbibliothek entwickelt sich in Richtung eines safe-by-default-Designs weiter
- Die API
os.Root aus Go 1.24 verhindert bei Dateisystemzugriffen Schwachstellen durch Pfadmanipulation bzw. Path Traversal
Interne Architektur- und Performance-Verbesserungen
- In Go 1.24 wurde die
map-Implementierung vollständig neu gestaltet und an moderne Hash-Tabellen-Designs angepasst
- Das verbessert die Performance, senkt die Latenz und erhöht die Speichereffizienz
- Der Green Tea Garbage Collector in Go 1.25 reduziert den GC-Overhead um 10 bis 40 %
- Dabei kommt ein neuer, auf moderne Hardware abgestimmter Algorithmus zum Einsatz
- In Go 1.26 sind auf Hardware mit AVX-512 zusätzliche Verbesserungen von 10 % geplant
- Ab Go 1.26 soll er standardmäßig aktiviert werden
Ausbau des Entwicklungs-Stacks und KI-Integration
- Go entwickelt sich über eine reine Programmiersprache hinaus zu einer vollständigen Entwicklungsplattform
- Der gopls Language Server wurde durch vier reguläre Releases (v0.17 bis v0.20) funktional erweitert
- Hinzu kamen Code-Analyzer, Refactorings, JSON-Tag-Verarbeitung und ein integrierter MCP-Server
- Es wurde eine Funktion zur automatischen Modernisierung von Code (modernizer) eingeführt
- Veraltete Code-Muster werden automatisch in moderne und sichere Formen umgewandelt
- Die Integration in IDE-Vorschläge hilft dabei, konsistenten Code zu bewahren und KI-gestütztes Lernen zu unterstützen
- In Go 1.26 soll der Befehl
go fix so umgestellt werden, dass der gesamte modernizer gesammelt angewendet wird
- In Zusammenarbeit mit Anthropic und der Community wurde das offizielle Go SDK v1.0.0 für das Model Context Protocol (MCP) veröffentlicht
- Es unterstützt MCP-Clients und -Server und baut auf den MCP-Funktionen von gopls auf
- Googles ADK for Go bietet auf Basis des MCP SDK ein Framework zur Entwicklung von Multi-Agenten-Systemen
- Die Nebenläufigkeit, Performance und Zuverlässigkeit von Go belegen seine Eignung für die Entwicklung produktiver KI-Systeme
Ausblick und Community
- Geplant sind die allgemeine Verfügbarkeit des Green Tea GC, Unterstützung für SIMD-Hardware und bessere Skalierung auf Multicore-Systemen
- Außerdem laufen Arbeiten an einem großen Upgrade für
encoding/json, Profiling von Goroutine-Leaks sowie Verbesserungen an net/http und unicode
- Die Sprach-, Tooling- und Diagnostiksysteme für die Verbindung von Go und KI werden weiter ausgebaut
- Das Open-Source-Projekt Go zielt auf eine größere Contributor-Community und mehr Skalierbarkeit in den Entwicklungsprozessen
- Die Weiterentwicklung von Go basiert auf den Beiträgen der Nutzer- und Contributor-Community und deutet auf weiteres stetiges Wachstum hin
1 Kommentare
Hacker-News-Kommentare
Ich mag Go wirklich sehr. In einer Monorepo-Umgebung glänzt es besonders. Wenn man eine neue Anwendung hinzufügt, muss man nur einen Ordner anlegen und dort eine Go-Datei mit einer
main()-Funktion ablegen. Führt man im Root-Verzeichnisgo install ./...aus, wird alles schnell gebaut.Diese Einfachheit war wirklich ein genialer Schachzug, wenn man schnell CLI-Programme erstellen musste.
Früher hieß es oft, die Sprache sei nicht der Flaschenhals, aber als ich Go zum ersten Mal sah, dachte ich: „Das ist anders.“ Es lernt sich auch wirklich schnell — vermutlich, weil die Sprachspezifikation klein ist.
Vom Gefühl her bekommt man 80 % von Rust mit 20 % des Aufwands.
Für mich ist Go wie ein übermäßig vereinfachtes Rust. Automatische Code-Korrekturen, erzwungene Schleifen und selbst die Prüfung, ob ein map-Schlüssel existiert, sind unbequem.
Auch Array-Verarbeitung und enum-Definitionen wirken unbeholfen, und wegen der Linter-Regeln im Unternehmen wird der Code so stark zerstückelt, dass es fast wie Enterprise-Java aussieht.
Trotzdem sind die Interfaces einfach und die Sprache ist schnell gelernt.
Wenn Go richtige Enums, natürliche Slice-Syntax, Iteratoren und eine Kurzsyntax zum Unwrappen von Ergebnissen hätte, wäre es viel besser.
Auch die Standard-JSON-Bibliothek hat viele Probleme, etwa dass leere Slices als null serialisiert werden.
Trotzdem ist die Tooling-Geschwindigkeit hoch, und die Pragmatik erkenne ich an.
Über das Unwrappen von Ergebnissen diskutiert die Community seit Langem, aber es gibt noch keine saubere Lösung.
Wenn man häufig Elemente in der Mitte eines Arrays löscht, hat man die falsche Datenstruktur gewählt.
slices.Deletelöschen, und Dinge wie ein erzwungenesif err != nilsind kein Sprachproblem, sondern ein Teamregel-Problem.Ich dachte kurz hoffnungsvoll, Go würde für den Apple II erscheinen (siehe SWEET16).
Zu einer neuen Go-Codebasis beizutragen ist einfach.
Dank der Einfachheit der Sprache und Standardwerkzeugen wie gofmt und golangci-lint haben alle Codebasen eine ähnliche Struktur.
Es gibt keine Debatten über Build-Tools wie in anderen Sprach-Communitys.
Die Behandlung negativer Werte beim
%-Operator fand ich allerdings verwirrend.Die Einführung eines automatischen Code-Modernisierungstools (modernizer) ist interessant.
Seit gopls v0.18.0 analysiert es Syntax, findet veraltete Idiome und wandelt sie automatisch in schnelleren und sichereren Code um.
So wie gofmt für konsistenten Stil gesorgt hat, wird modernizer für konsistente Idiome sorgen.
Wenn man in golangci-lint Linter wie exhaustive, exhaustruct und wrapcheck aktiviert, verbessern sich Sicherheit und Entwicklungsgeschwindigkeit deutlich.
In unserem Unternehmen gibt es ein 10-wöchiges Onboarding-Programm für Go-Backend-Entwickler (Link zum Plan).
Ich bin vor 7 Jahren von Python zu Go gewechselt, und das war ein Schlüsselfaktor für den Erfolg des Startups.
Anfangs war ich skeptisch gegenüber Go, inzwischen ist es aber meine Lieblingssprache. Einfach und gleichzeitig leistungsfähig.
Schön wäre nur, wenn null-Prüfungen, Error-Stacktraces und exhaustive Prüfungen für Sum Types standardmäßig vorhanden wären.
Ich glaube, Go wäre perfekt, wenn es nur noch ein paar mehr Funktionen aus der funktionalen Programmierung hätte.
Besonders Unveränderlichkeit, null-Behandlung und Switch-Exhaustiveness fehlen mir.
Ich gleiche das derzeit mit Ubers NilAway aus, aber Unterstützung auf Ebene des Typsystems wäre besser.