© Valerii Shkliaev/Shutterstock.com
Des Gophers neue Kleider

Go Modules revisited


Go 1.11 hat einen Paradigmenwechsel eingeleitet. Aus Go Packages werden versionierte Go Modules. Go Modules lösen den GOPATH ab und werden fester Bestandteil der Go Toolchain. Bis jetzt mussten Go Modules explizit aktiviert werden, doch mit Go 1.13 ändert sich das. Ihr lernt, was Go 1.13 in Sachen Go Modules bringt und was sich seit Go 1.11 getan hat.

Mit Go 1.11 wurde Go um Module erweitert. Damit beginnt für Go eine neue Ära, denn aus Go Packages werden versionierte Go Modules. Diese ersetzen nicht nur Packages, sondern auch gleich den GOPATH. So der Plan, denn noch sind Go Modules nur experimentell, daran ändert sich auch mit Go 1.13 nichts. Aber es kommen wichtige neue Funktionen bei den Go Modules hinzu: Sie sollen durch Mirrors schneller und zuverlässiger werden. Und mit Module Authentication werden sie zudem noch sicherer. Klingt vielversprechend, nicht wahr? Aber bevor wir zu den neuen Features kommen, rekapitulieren wir kurz, was Go Modules bringen, außerdem werfen wir einen Blick darauf, wie Go Modules von der Go-Community angenommen werden.

Was Go Modules bringen

Go Modules machen aus Go Packages versionierte Module. Aus dem Pfad des Packages im GOPATH wird der Importpfad des Moduls. Die Version kommt neu hinzu. So wird aus dem Pfad $GOPATH/github.com/gorilla/mux des Packages Gorilla Mux ein Go Module mit Importpfad github.com/gorilla/mux und Version 1.6.2. Der Importpfad des Moduls ersetzt den Pfad des Packages im GOPATH, der damit auf lange Sicht überflüssig wird.

Ein Go Module enthält die beiden Konfigurationsdateien go.mod und go.sum. In der Datei go.mod steht der Importpfad des Moduls und alle Abhängigkeiten des Moduls (mit Importpfad und Version). Die go.sum enthält Hashes aller Modulabhängigkeiten. Anhand der Hashes wird sichergestellt, dass auch zukünftige Builds immer exakt denselben Code des Moduls erhalten.

Go Modules sind ein Teil von Go. Go unterstützt sie seit Version 1.11, allerdings müssen sie mit der Umgebungsvariable GO111MODULE=on aktiviert werden. Bestehende Tools/Kommandos wie go get funktionieren wie gewohnt, auch mit Go Modules. Neu hinzugekommen ist das Go-Tool mod. Mit go mod init wird ein neues Modul erstellt, mit go mod graph wird ein Graph der Modulabhängigkeiten auf der Kommandozeile ausgegeben.

Mit Go Modules wird die Verwaltung der Abhängigkeiten eines Projekts fester Bestandteil von Go, die Communitylösungen wie dep [1] ersetzen sollen, aber auch das mit Go 1.5 eingeführte Vendoring überflüssig machen. Sie sind ...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang