Module

Go Module (modules) bezeichnet eine Art der Paketverwaltung. Ein Paket kann ein Modul sein, Teil eines Moduls sein oder unabhängig davon existieren. Module können andere Module laden.

Ich fange mit einem Beispiel an: in einem Verzeichnis katalog wird die Datei katalog.go mit folgendem Inhalt erstellt.

package katalog

type Fahrzeug struct {
	Name string
}

Damit existiert das Paket katalog. Jetzt kann man ein Modul mit irgendeinem Namen erstellen, ich nutze der Einfachheit halber denselben Namen. Dazu muss man go mod init aufrufen in dem Paket-Verzeichnis aufrufen:

go mod init katalog

Das erstellt eine Datei mit dem Namen go.mod:

module katalog

go 1.15

Die Verzeichnisstruktur sieht nun wie folgt aus:

.
└── katalog
    ├── go.mod
    └── katalog.go

Bis hier her gibt es keinen sinnvollen Vorteil gegenüber der Paketstruktur. Interessant wird es, wenn das Paket andere Module nutzt:

package katalog

import "golang.org/x/text/unicode/norm"

type Fahrzeug struct {
	Name string
}

func normalisiereEingabe(eingabe string) string {
	return norm.NFC.String(eingabe)
}
Hier wird eine externe Bibliothek geladen. Die Unicode-Normalisierung dient hier als Beispiel zum Nutzen einer Bibliothek.

Anschließend ändert man die Datei go.mod per Hand oder mit dem Befehl go mod tidy, um die Abhängigkeit einzutragen:

module fahrzeugliste

go 1.15

require golang.org/x/text v0.3.4
Die geänderte Datei go.mod. Hier ist nicht nur das geladene Modul, sondern die gewünschte Versionsnummer angegeben (v0.0.0 für die neuste Version)

Neben der Datei go.mod wird auch die Datei go.sum erstellt, die die Prüfsummen der Module enthält, damit man sichergehen kann, immer die gewünschten Dateien zu benutzen.

golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc=
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
Die Datei go.sum enthält Prüfsummen der benutzten Module, damit die Integrität sichergestellt ist. Diese Datei wird mit go mod tidy aktualisiert.

Die Abhängigkeiten (in diesem Fall golang.org/x/text) werden nun vom System automatisch in der gewünschten Version herunter geladen.