Gopher ante portas

Go 1.13 ist da: Go Modules, Runtime und Bibliotheken im Fokus

Dominik Mohilo

© Reneé French (CC BY 3.0 DE) ©SuS Media

Es kommt einem vor, als wäre das letzte Release von Go gerade erst geschehen, da erscheint pünktlich bereits der Nachfolger. Mit Go 1.13 hält Google das Versprechen, alle sechs Monate ein neues Release herauszubringen. Für die aktuelle Version wurden die Go Modules erneut aufgebohrt, außerdem die Runtime und die Bibliotheken überarbeitet.

Go 2.0 ist nach wie vor nicht in Sicht, diese Nachricht dürfte eingefleischte Gopher kaum überraschen. Das bedeutet aber nicht, dass Googles designierte C-Alternative nicht in regelmäßigen Abständen (alle sechs Monate) ein großes Update bekommt. Und einen Vorteil hat das Ganze natürlich auch: Google verspricht die Rückwärtskompatibilität für den gesamten Go 1.x Release Train. Soll heißen, alle Go-Anwendungen, die mit einer Go-Version der 1.x-Reihe geschrieben wurden, sollten weiterhin einwandfrei funktionieren.

Go 1.13 bringt erstmals seit Go 1.10 Neuerungen an der Sprache selbst, nachdem dies in den beiden vorherigen Versionen Go 1.12 und Go 1.11 nicht der Fall war. Ansonsten standen erneut die Go Modules im Fokus, zu deren Änderungen Jan Stamer einen ausführlichen Artikel für uns geschrieben hat. Zudem wurden die Runtime, die Toolchain und die Bibliotheken verbessert bzw. aktualisiert.

Go 1.13: Das ist neu

Änderungen an der Golang

Russ Cox hat im März dieses Jahres eine umfangreiche Überarbeitung der numerischen Literale für Go 2.0 vorgeschlagen. Bereits für Go 1.13 wurde unterdessen in Vorbereitung darauf, eine etwas einheitlichere und modernere Präfix-Sammlung erstellt:

Binäre Integer-Literale werden zukünftig das Präfix 0b bzw. 0B erhalten, während oktale Integer-Literale das Präfix 0o bzw. 0O haben werden. Die bisherige Variante der oktalen Integer-Literale bleibt allerdings valide. Die Mantissa einer Gleitkommazahl im Hexadezimalsystem wird ab Go 1.13 mit dem Präfix 0x bzw. 0X dargestellt.

Wem die uint-Konversionen ein Dorn im Auge sind, wird sich über Go 1.13 freuen: Die Einschränkung, dass sogenannte Shift Counts vorzeichenlos sein müssen, fällt weg. So können sich viele der oben genannten Konversionen zukünftig gespart werden.

Tooling / Go Modules

Eine detaillierte Einführung in die Welt der Go Modules hat Jan Stamer bereits auf JAXenter veröffentlicht. Und auch welche Veränderungen Go 1.13 mit sich bringt, hat er für uns ausführlich beleuchtet. Daher sei an dieser Stelle nur gesagt, dass der Befehl go get, sofern die Module aktiviert sind, mit der Flag -u ein Set von Modulen aktualisiert. Dieses Set ist dafür konsistenter mit den Packages, die der Befehl go get -u im GOPATH-Modus aktualisiert.

Neu ist auch, dass der Befehl go eine zusätzliche Validierung des angeforderten Versions-Strings vollzieht, wenn ein Modul aus einem Versionskontrollsystem gezogen wird. Dabei wird unter anderem das Mapping zwischen Pseudoversionen und den Metadaten der Versionskontrolle verifiziert. Der Befehl go version akzeptiert ab Go 1.13 auch Parameter für ausführbare Dateien bzw. Verzeichnisse. Entwickler, die gerne alle Pfade eines Dateisystems von kompilierten ausführbaren Dateien entfernen wollen, können in der neuen Golang-Version einfach die Flag -trimpath für den Befehl go build nutzen.

Der Compiler hat hingegen eine präzisere Escape-Analyse spendiert bekommen und der Assembler unterstützt viele der in ARM v8.1 eingeführten Instructions. Wer den Dokumentationswebserver vermisst, den man via godoc bzw. go doc aufrufen konnte, muss ihn zukünftig lokal ausführen, da er nichtmehr standardmäßig enthalten ist. Dies geht via go get golang.org/x/tools/cmd/godoc.

DevOpsCon Istio Cheat Sheet

Free: BRAND NEW DevOps Istio Cheat Sheet

Ever felt like service mesh chaos is taking over? As a follow-up to our previous cheat sheet featuring the most important commands and functions, DevOpsCon speaker Michael Hofmann has put together the 8 best practices you should keep in mind when using Istio.

Runtime / Core Library

Das Wichtigste für viele Entwickler ist die Performance. Go 1.13 soll, so die Release Notes, für die meisten Nutzer um rund ein Drittel (30%) steigen. Zudem werden schwächere Systeme geschützt, da die Runtime den genutzten Speicher etwas einfacher und „aggressiver“ an das System zurückgibt.

In der Core Library von Go gibt es ein neues Package: crypto/ed25519. Dieses implementiert das Signaturschema Ed25519, dessen Funktionalität bislang vom Package golang.org/x/crypto/ed25519 bereitgestellt wurde. Dieses wird nun der Wrapper für das neue Package. Go 1.13 bringt außerdem nun final die standardmäßige Unterstützung für TLS 1.3 im Package crypto/tls. Noch kann TLS 1.3 deaktiviert werden (via tls13=0 als Zusatz zur Umgebungsvariable GODEBUG). Diese Möglichkeit wird in Go 1.14 allerdings entfernt werden.

Eine weitere Neuerung ist der Support von Error Wrapping. Dazu heißt es in den Release Notes:

An error e can wrap another error w by providing an Unwrap method that returns w. Both e and w are available to programs, allowing e to provide additional context to w or to reinterpret it while still allowing programs to make decisions based on w.

Weitere Informationen zu letzterem Feature gibt es in der Error-Dokumentation.

Ports

Eines vorweg: Go ist das letzte Release, das auf dem Native Client (NaCl) laufen wird. Interessant ist auch, dass Anwendungen, die in Go geschrieben sind, mit Android 10 kompatibel sind – dabei wurde das neue mobile Betriebssystem von Google gerade heute veröffentlicht. Das Aus gibt es für alle Mac-Nutzer, die noch nicht macOS 10.11 (El Capitan) oder eine neuere Version nutzen: Die Unterstützung für derart alte Betriebssysteme wurde aufgegeben. Bei Windows ist weiterhin Version 7 Pflicht.

Dies ist freilich nur eine kleine Übersicht über die Highlights der aktuellen Version. Die vollständigen Release Notes für Go 1.13 finden sich in der Dokumentation der Programmiersprache.

Verwandte Themen:

Geschrieben von
Dominik Mohilo
Dominik Mohilo
Dominik Mohilo studierte Germanistik und Soziologie an der Goethe-Universität in Frankfurt. Seit 2015 ist er Redakteur bei S&S-Media.
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
4000
  Subscribe  
Benachrichtige mich zu: