Zum Hauptinhalt Zur Navigation Zur Suche

Programmiersprache: Go 1.14 erscheint mit stabilem Modulsystem

Die aktuelle Version 1.14 von Go löst Abhängigkeiten einfacher auf und erlaubt das störungsfreie Einbetten von Schnittstellen, deren Methoden sich überschneiden. Ebenso kann nun ein unsicheres Go definiert werden.
/ Kristian Kißling (Linux Magazin)
5 Kommentare News folgen (öffnet im neuen Fenster)
Die Taschenratte (engl. Gopher) ist das Maskottchen von Go. (Bild: Don Owens, flickr.com)
Die Taschenratte (engl. Gopher) ist das Maskottchen von Go. Bild: Don Owens, flickr.com / CC-BY 2.0

Die Programmiersprache Go enthält in der nun verfügbaren Version 1.14(öffnet im neuen Fenster) mit den Go Modules ein neues System zum Verwalten von Abhängigkeiten. Ein Modul besteht dabei aus mehreren Paketen, die in einem Verzeichnis liegen und die durch die Datei go.mod verwaltet werden. In dieser kann unter anderem der Pfad zum Modul und zu den darin enthaltenen Abhängigkeiten definiert werden. Diese Abhängigkeiten wiederum listet die Datei einzeln mit Pfadnamen und Versionsnummern (Semver) auf.

Der Kommandozeilenbefehl go kommt bereits seit Go 1.11 mit dem neuen Modulsystem zum Auflösen von Abhängigkeiten klar. Davor liefen Importe über GOPATH. Doch erst ab der aktuellen Version deklarieren die Entwickler das Modulsystem als hinreichend stabil für den breiten Einsatz. Die Go-Entwickler betrachten es damit als produktionsreif und rufen die Nutzer auf, ab Version 1.14 auf das neue System zu wechseln.

Ebenfalls neu ist die Möglichkeit, Interfaces auch dann einzubetten, wenn ihre Methoden mit denen von übergeordneten Interfaces überlappen. Das heißt, die eingebetteten Interface-Methoden dürfen dieselben Namen und identische Signaturen tragen. Explizit deklarierte Methoden eines Interfaces müssen allerdings weiterhin Unikate bleiben.

Gewollt unsicher

Eine neu eingeführte Umgebungsvariable heißt GOINSECURE. Sie lässt sich dem go-Befehl übergeben und signalisiert, dass Go kein HTTPS benötigt und auch keine Zertifkate validieren muss, wenn es bestimmt Module lädt. Eine durch Kommata unterteilte Liste mit Glob-Patterns bildet den Wert für GOINSECURE. Potenziell öffnet GOINSECURE allerdings Sicherheitslücken. Entwickler sollten also genau wissen, wann und wie sie die Variable einsetzen.

Auch in der Laufzeitumgebung gibt es mit Version 1.14 Änderungen. Der Einsatz des Keywords defer erzeugt so gut wie keinen Overhead mehr im Vergleich zum bisherigen Ansatz(öffnet im neuen Fenster). Der bestand darin, die verzögerte Funktion direkt aufzurufen. Damit lässt sich defer laut den Release Notes auch in Performance-kritischen Code einbetten.

Goroutines lassen sich nun zudem asynchron unterbrechen. Dadurch erzeugen Schleifen ohne Funktionsaufrufe keine Deadlocks mehr oder verzögern die Garbage Collection. Unter Linux führen die gewollten Unterbrechungen (Preemption) aber unter Umständen dazu, dass Programme, die mit Go 1.14 laufen, beim Ausführen mehr Signale erhalten.

Verwenden Entwickler Pakete wie syscall oder golang.org/x/sys/unix, könnte deshalb die Fehlermeldung EINTR bei langsamen Syscalls häufiger auftauchen. Die Go-Macher schlagen Schleifen vor, um die Systemaufrufe wiederholt aufzurufen. Über weitere Änderungen an Go 1.14 informiert die Ankündigung(öffnet im neuen Fenster).


Relevante Themen