11 Punkte von GN⁺ 2025-11-16 | 1 Kommentare | Auf WhatsApp teilen
  • 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

 
GN⁺ 2025-11-16
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-Verzeichnis go install ./... aus, wird alles schnell gebaut.
    Diese Einfachheit war wirklich ein genialer Schachzug, wenn man schnell CLI-Programme erstellen musste.

    • Ich frage mich, ob das nicht auch in fast allen anderen Sprachen so möglich ist.
    • Ich finde, solche Monorepo-Anwendungsfälle sollten häufiger erwähnt werden.
  • 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.

    • Das Gute an Go ist, dass man die gesamte Sprache in kurzer Zeit lernen kann. Man kann alles verstehen, einschließlich Concurrency und Fallstricken. Bei C# oder C++ dagegen ist die Komplexität so hoch, dass es kaum jemanden gibt, der alles vollständig versteht.
    • Wie Rob Pike sagte, ist Go eine Sprache, die für Junior-Entwickler entworfen wurde. Ein großes Ziel war bei Google auch, die Build-Zeiten zu verkürzen. Deshalb führen ungenutzte Abhängigkeiten zu Compilerfehlern (Quelle).
    • Eine kleine Sprachspezifikation bedeutet nicht unbedingt Einfachheit. Swift zum Beispiel hat trotz großer Spezifikation viele locker definierte Bereiche. Ich habe beim Lesen der Go-Spezifikation sogar einen Fehler in der Syntax für Ganzzahl-Literale entdeckt.
    • Schade ist allerdings, dass die verbleibenden 20 % von Rust 80 % des Nutzens ausmachen.
    • Außerdem wird auch Go zunehmend komplexer. Zum Beispiel hat die Einführung von Generics die Einfachheit etwas verringert.
  • 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.

    • Einer der Nachteile von Go ist die Kultur der kurzen Variablennamen. Dass das erste Feld einer Struct wie Vererbung funktioniert oder die Zugriffskontrolle über Groß- und Kleinschreibung geregelt wird, ist ebenfalls unpraktisch.
      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.
    • Ich habe den Go-Lexer/Parser geforkt und eine experimentelle Sprache gebaut, die Result[T]/Option[T], Sum Types, Iteratoren und Tuples hinzufügt (agl-Projekt).
    • Go hat durchaus Enums. Es fehlen nur Sum Types. Arrays und Slices sind fast identisch mit C, und sie wirken nur verwirrend, weil es an „Magie“ fehlt.
      Über das Unwrappen von Ergebnissen diskutiert die Community seit Langem, aber es gibt noch keine saubere Lösung.
    • Tatsächlich gibt es in Go bereits das iter-Paket und slices.Delete.
      Wenn man häufig Elemente in der Mitte eines Arrays löscht, hat man die falsche Datenstruktur gewählt.
    • Man kann mit slices.Delete löschen, und Dinge wie ein erzwungenes if err != nil sind 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.

    • Ich versuche gerade, die Wissenschaftler, mit denen ich arbeite, dazu zu bringen, Code-Formatter und Linter zu verwenden. Ich denke, es war eine gute Entscheidung, das wie bei Go zu erzwingen.
    • Ich habe gerade erst angefangen, Go zu lernen, und mir gefällt die Philosophie, dass es „nur einen Weg“ gibt.
      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.

    • Allerdings verlangen die meisten Go-Stellen auch DevOps-Kenntnisse (AWS, Kubernetes, CI/CD). Reine Software-Engineering-Positionen sind selten.
    • Direktlink
  • 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.

    • Als Tool für null-Prüfungen wird NilAway entwickelt.
    • Sum-Type-Prüfungen sind mit golangci-lint möglich.
  • 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.

    • Es gibt ein Projekt namens Borgo, aber es ist noch unreif.
    • Ich träume von Sum Types und Go ohne nil-Pointer. Gleam geht in diese Richtung, ist aber einen ganz anderen Weg eingeschlagen.