Die mit Spannung erwartete Programmiersprache Go 1.18 wurde endlich als Produktionsversion mit ihren bahnbrechenden Generika-Funktionen eingeführt. Dies ist die bedeutendste Änderung an der Programmiersprache Go seit dem ersten Start von Go 1.0 im Jahr 2012. Go 1.18 kann ab dem 15. März auf go.dev heruntergeladen werden.
Generics war die am häufigsten nachgefragte Funktion von Go-Programmierern und bietet Unterstützung für generischen Code mit parametrisierten Typen. Nachfolgende Releases sollen weitere Unterstützung für kompliziertere generische Anwendungsfälle bieten. Benutzer können auf Informationen zu dieser Funktion über ein generisches Lernprogramm und Versionshinweise zugreifen.
Der Go-Sprachserver gopls unterstützt jetzt zusammen mit der Visual Studio Code Go-Erweiterung Generics. Anweisungen zum Installieren von gopls mit Generika finden Sie in der Dokumentation.
Die Produktionsversion von Go 1.18 liegt hinter der Beta- und der Release Candidate-Phase. Die Erstveröffentlichung war für Februar 2022 geplant, wurde aber auf Mitte März verschoben. Go 1.18 Beta 1, das am 14. Dezember debütierte, war die wichtigste Vorschauversion der von Google entwickelten Open-Source-Sprache zur Unterstützung von generischem Code mit parametrisierten Typen. Diese Beta-Version war auch die am häufigsten heruntergeladene Go-Beta aller Zeiten, mit doppelt so vielen Downloads wie jede vorherige Beta-Version.
Die generische Programmierung ist eine Erweiterung, die es erlaubt, Funktionen und Datenstrukturen in generischer Form darzustellen, wobei Typen ausgeklammert werden. Dies erleichtert die gemeinsame Nutzung von Code und vereinfacht die Erstellung von Programmen.
Das Go-Team riet zur Vorsicht bei der Annäherung an die neuen Generika-Funktionen, da neue Fehler mit jeder wichtigen neuen Funktion auftauchen könnten. Darüber hinaus wurde die Unterstützung für bestimmte subtile Fälle, wie z. B. bestimmte Arten von rekursiven generischen Typen, auf zukünftige Versionen verschoben.
Trotz dieser Warnung waren Early Adopters Berichten zufolge mit der neuen Funktion zufrieden. Ein kurzes Tutorial zum Einstieg in Generika wurde hier veröffentlicht. Während Go Schnittstellentypen hatte, eine Form der generischen Programmierung, fehlten ihm bestimmte Aspekte, die Go-Entwickler von Generika wollten, wie in einem Blogbeitrag vom Juli 2019 berichtet wurde. Beispielsweise suchten Befürworter von Go-Generika nach Funktionen wie Reverse, ohne sich um den Elementtyp eines Slice zu kümmern.
Die veröffentlichten Hinweise für Go 1.18 heben auch seine anderen Schlüsselfunktionen hervor, wie zum Beispiel:
- Integrierte Unterstützung für das Schreiben von Fuzzing-basierten Tests, um Eingaben zu identifizieren, die dazu führen, dass ein Programm abstürzt oder ungültige Antworten zurückgibt. Diese Funktion ist in Go 1.18 experimentell.
- Ein Go-Arbeitsbereichsmodus, der es Entwicklern ermöglicht, mit mehreren Go-Modulen gleichzeitig zu arbeiten, was für umfangreichere Projekte unerlässlich ist.
- Ein verbesserter Befehl go version -m, der jetzt Build-Details wie Compiler-Flags aufzeichnet.
- Eine GOAMD64-Umgebungsvariable, mit der Benutzer aus vier Versionen der AMD64-Architektur wählen können.
- Verbesserungen der CPU-Leistung auf Apple M1, ARM64 und PowerPC64 um bis zu 20 %, die auf die Erweiterung der Go 1.17-Register-ABI-Aufrufkonvention auf diese Architekturen zurückzuführen sind.
- Die Windows/Arm- und Windows/Arm64-Ports unterstützen jetzt nicht kooperative Vorkaufsrecht, wodurch diese Fähigkeit für alle vier Windows-Ports verfügbar wird und möglicherweise subtile Fehler behoben werden, die beim Aufrufen von Win32-Funktionen auftreten, die für längere Zeit blockieren.
- Besser vorhersehbarer Garbage-Collection-Overhead, wenn Nicht-Heap-Quellen für GC-Arbeit erheblich sind, da diese Quellen bei der Bestimmung der Häufigkeit von Garbage-Collection-Ausführungen berücksichtigt werden.
Go 1.17 wurde im August veröffentlicht. Go ist vor allem für seine Verwendung bei der Entwicklung des Docker-Containersystems bekannt und wurde als einfache, leicht zu erlernende Programmiersprache mit robuster Unterstützung für Parallelität konzipiert. Für Entwickler, die no-code Lösungen wie die Plattform von AppMaster erkunden möchten, um Web-, Mobil- und Backend-Anwendungen zu erstellen, kann dies dazu beitragen, die Anwendungsentwicklung zu beschleunigen und Kosten zu senken, während technische Schulden beseitigt werden.