Programmiersprache: Go 1.16 setzt verstärkt auf Module und kennt Apple Silicon
Das in Version 1.11 eingeführte Konzept der Module ist nun standardmäßig aktiviert. Außerdem kann Go nun statische Dateien einbinden.
Google hat Version 1.16 der Prgrammiersprache Go veröffentlicht, die wie der Vorgänger vor allem Neuerungen unter der Haube mitbringt. Das in Version 1.11 eingeführte Modulsystem ist nun standardmäßig aktivert, und der go
-Befehl erlaubt das Einbinden statischer Dateien. FĂĽr deren Verarbeitung bringt die Core Library ein eigenes Paket mit.
Bei den Plattform-Ports dĂĽrfte die Anbindung an Apple Silicon wenig ĂĽberraschen. Das Kompilieren auf die 64-bit-ARM-Architektur erfolgt ĂĽber die Parameter GOOS=darwin, GOARCH=arm64
, und der Port arbeitet mit cgo zum Erstellen von Go-Paketen zusammen, die C-Code aufrufen. Im Zuge der Integration hat das Team den iOS-Port von darwin/arm64
nach ios/arm64
umbenannt.
Chefsache Modulsystem
Seit Version 1.11 kennt Go das Konzept der Module als Alternative zu GOPATH
. Das System, das den Umgang mit Dependencies und das Versionieren vereinfachen soll, ist nun standardmäßig aktiviert. Module sind Pakete mit einem gemeinsamen Import-Präfix, die über Semantic Versioning versioniert sind. Die Umgebungsvariable GO111MODULE
hat im aktuellen Release standardmäßig den Wert on
, auch wenn keine go.mod-Datei im Arbeitsverzeichnis existiert. Für das alte Verfahren, die zum Aktivieren des Modulsystems eine passende Datei erfordert, lässt sich die Umgebungsvariable auf den Wert auto
setzen.
Build-Befehle wie go build
und go test
ändern die Dateien go.mod und go.sum nicht mehr selbsttätig, sondern melden einen Fehler, wenn eine Modulanforderung oder eine Prüfsumme fehlt oder veraltet ist. Eine automatisierte Anpassung lässt sich über go mod tidy
or go get
durchfĂĽhren.
Lesen Sie auch
Ein Einstieg in die Programmiersprache Go, Teil 1
Der Befehl go install
erlaubt nun das AnfĂĽgen einer Version in Form von @latest
oder ĂĽber eine spezifische Nummer wie @v1.0.0
. FĂĽr den Build und die Installation im Modulmodus gilt der Befehl go install
als Mittel der Wahl.
Fest eingebunden
Der go
-Befehl kann ĂĽber die Direktive //go:embed
statische Dateien und Dateibäume in das Executable einbinden. Für die Verarbeitung der Inhalte bringt die Core Library das neue Paket embed
mit. Die Dateiinhalte lassen sich nutzen, um einen string
ein []byte
-Slice beziehungsweise -Array oder ein Dateisystem-Interface FS
nutzen:
import _ "embed"
// Einbindung als String
//go:embed hello.txt
var s string
print(s)
// Einbindung als Byte Slice
//go:embed hello.txt
var b []byte
print(string(b))
// Einbindung als Datei(en) in einem File System
//go:embed hello.txt
var f embed.FS
data, _ := f.ReadFile("hello.txt")
print(string(data))
Das zuletzt genutzte Interface fs.FS
ist ebenfalls eine Neuerung, die im aktuellen Release Einzug in das Paket io/fs
hält. Sie dienst als Abstraktion für Dateibäume mit reinem Lesezugriff.
Altlasten im IO-Zugriff
Neben den Neuzugängen bei den Libraries ist erwähnenswert, dass das Paket io/ioutil
nun als veraltet gilt. Als Grund nennt die Ankündigung zu Go 1.16, dass es sich bei dem Package um eine "schlecht definierte und schwer verständliche Sammlung" gehandelt habe. Die jeweiligen Funktionen sind nun in den Paketen io
und os
verfĂĽgbar.
Auch wenn io/ioutil
zunächst nicht verschwinden soll, empfiehlt die Dokumentation den Umstieg auf die jeweils neuen Namen: io.Discard
, io.NopCloser
, io.ReadAll
, os.ReadDir
, os.ReadFile
, os.MkdirTemp
, os.CreateTemp
und os.WriteFile
.
Googles Programmiersprache (noch) ohne Generics
2009 hat Google die Programmiersprache Go erstmals der Öffentlichkeit vorgestellt und sie als Alternative zu C positioniert. 2015 befreite sich das Projekt von den letzten C-Überbleibseln im Code und besitzt seitdem eine komplett in Go geschriebene Toolchain und Laufzeitumgebung. Die Programmiersprache unterstützt Nebenläufigkeit und entstand vor allem mit Blick auf verteilte Cloud- und Serveranwendungen. Zu den Vorzeigeprojekten gehören Kubernetes, Istio und Docker.
Eine mit Spannung erwartete Ergänzung befindet sich derzeit noch in der Umsetzung: Generics sollen nach den aktuellen Plänen Ende des Jahres als Beta-Feature Einzug in die Programmiersprache halten. Derzeit müssen Entwicklerinnen und Entwickler Datenstrukturen wie Listen oder Bäume für jeden konkreten Datentyp separat implementieren und grundlegende Funktionen unter anderem zum Sortieren für jede Umsetzung neu erstellen.
Anfangs hatte sich das Team bewusst gegen die aus anderen Programmiersprachen bekannten Konzepte der generischen Programmierung entschieden, um die Komplexität gering zu halten. Aufgrund der Vorzüge, die Generics bringen, stehen sie jedoch schon länger auf dem Wunschzettel der Community. Im Juni hat das Go-Team daher einen Designentwurf für Typparameter als Grundlage vorgelegt und sich zu den weiteren Plänen geäußert.
Weitere Neuerungen und Ă„nderungen in Go 1.16 lassen sich den Release Notes in der Dokumentation der Programmiersprache entnehmen.
(rme)