Die Programmiersprache Go ist in einer überarbeiteten Version zu haben. Go 1.14 löst Abhängigkeiten einfacher auf und erlaubt das störungsfreie Einbetten von Schnittstellen, deren Methoden sich überschneiden.
Go bringt mit Go Modules ein neues System zum Verwalten von Abhängigkeiten mit. Ein Modul besteht dabei aus mehreren Paketen, die in einem Verzeichnis liegen und über denen eine “go.mod”-Datei thront. In diesem definiert der Entwickler unter anderem den Pfad zum Modul und zu den darin enthaltenen Abhängigkeiten. Diese Abhängigkeiten wiederum listet die Datei einzeln mit Pfadnamen und Versionsnummern (Semver) auf.
Der Go-Befehl kommt bereits seit Go 1.11 mit dem neuen Modulsystem zum Auflösen von Abhängigkeiten klar. davor liefen Importe über “GOPATH”. Doch erst aber der aktuellen Version deklarieren die Entwickler das Modulsystem als hinreichend stabil für den breiten Einsatz. Die Go-Entwickler betrachten es nun als produktionsreif und rufen die Nutzer auf, ab Version 1.14 auf das neue System zu wechseln.
Auch neu ist die Erlaubnis, Interfaces auch dann einzubetten, wenn ihre Methoden mit denen von übergeordneten Interfaces überlappen. Das heißt, die eingebetteten Interface-Methoden dürfen dieselben Namen tragen und identische Signaturen. 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.
Mit Unterbrechungen
Auch in der Runtime gibt es Änderungen. Der Einsatz des Keywords “defer” erzeugt so gut wie keinen Overhead mehr im Vergleich zum bisherigen Ansatz. 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 neuerdings 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 sie Pakete wie “syscall” oder “golang.org/x/sys/unix”, dürften Entwickler die Fehlermeldung “EINTR” bei langsamen Syscalls häufiger sehen. Die Go-Macher schlagen Schleifen vor, um die System Calls erneut aufzurufen. Über weitere Änderungen an Go 1.14 informiert die Ankündigung.




