Den GOPATH verstehen

Einführung

Dieser Artikel zeigt Ihnen, was der GOPATH ist, wie er funktioniert und wie man ihn einrichtet. Dies ist ein wichtiger Schritt, um eine Go-Entwicklungsumgebung einzurichten und um zu verstehen, wie Go Quelldateien findet, installiert und baut. In diesem Artikel werden wir GOPATH verwenden, wenn wir uns auf das Konzept der Ordnerstruktur beziehen, die wir besprechen werden. Wir werden $GOPATH verwenden, um uns auf die Umgebungsvariable zu beziehen, die Go verwendet, um die Ordnerstruktur zu finden.

Ein Go-Arbeitsbereich ist die Art und Weise, wie Go unsere Quelldateien, kompilierten Binärdateien und zwischengespeicherten Objekte verwaltet, die später für eine schnellere Kompilierung verwendet werden. Es ist typisch und wird auch empfohlen, nur einen Go-Workspace zu haben, obwohl es möglich ist, mehrere Spaces zu haben. GOPATH fungiert als Stammverzeichnis eines Arbeitsbereichs.

Setzen der Umgebungsvariable $GOPATH

Die Umgebungsvariable $GOPATH listet die Orte auf, an denen Go nach Go-Arbeitsbereichen suchen soll.

Standardmäßig nimmt Go an, dass sich unser GOPATH unter $HOME/go befindet, wobei $HOME das Stammverzeichnis unseres Benutzerkontos auf unserem Computer ist. Wir können dies ändern, indem wir die Umgebungsvariable $GOPATH setzen. Weitere Informationen finden Sie in diesem Tutorial über das Lesen und Setzen von Umgebungsvariablen unter Linux.

Weitere Informationen über das Setzen der $GOPATH-Variable finden Sie in der Go-Dokumentation.

Außerdem führt diese Serie durch die Installation von Go und das Einrichten einer Go-Entwicklungsumgebung.

$GOPATH ist nicht $GOROOT

Das $GOROOT ist der Ort, an dem der Code, der Compiler und die Werkzeuge von Go liegen – es ist nicht unser Quellcode. Das $GOROOT ist normalerweise etwas wie /usr/local/go. Unser $GOPATH ist normalerweise so etwas wie $HOME/go.

Während wir die $GOROOT-Variable nicht mehr speziell einrichten müssen, wird sie in älteren Materialien immer noch referenziert.

Lassen Sie uns nun die Struktur des Go-Arbeitsbereichs besprechen.

Anatomie des Go-Arbeitsbereichs

Innerhalb eines Go-Arbeitsbereichs, oder GOPATH, gibt es drei Verzeichnisse: bin, pkg, und src. Jedes dieser Verzeichnisse hat eine besondere Bedeutung für die Go-Werkzeugkette.

.├── bin├── pkg└── src └── github.com/foo/bar └── bar.go

Lassen Sie uns einen Blick auf jedes dieser Verzeichnisse werfen.

Das Verzeichnis $GOPATH/bin ist der Ort, an dem Go die Binärdateien ablegt, die go install kompiliert. Unser Betriebssystem verwendet die Umgebungsvariable $PATH, um Binäranwendungen zu finden, die ohne einen vollständigen Pfad ausgeführt werden können. Es wird empfohlen, dieses Verzeichnis zu unserer globalen $PATH-Variable hinzuzufügen.

Wenn wir zum Beispiel $GOPATH/bin nicht zu $PATH hinzufügen, um ein Programm von dort aus auszuführen, müssten wir Folgendes ausführen:

  • $GOPATH/bin/myapp

Wenn $GOPATH/bin zu $PATH hinzugefügt wird, können wir denselben Aufruf wie folgt machen:

  • myapp

Das $GOPATH/pkg-Verzeichnis ist der Ort, an dem Go vorkompilierte Objektdateien speichert, um die spätere Kompilierung von Programmen zu beschleunigen. In der Regel werden die meisten Entwickler nicht auf dieses Verzeichnis zugreifen müssen. Wenn Sie Probleme mit der Kompilierung haben, können Sie dieses Verzeichnis löschen und Go wird es dann neu erstellen.

Das src-Verzeichnis ist der Ort, an dem sich alle unsere .go-Dateien, also der Quellcode, befinden müssen. Dies ist nicht zu verwechseln mit dem Quellcode, den das Go-Tooling verwendet und der sich im Verzeichnis $GOROOT befindet. Wenn wir Go-Anwendungen, -Pakete und -Bibliotheken schreiben, werden wir diese Dateien unter $GOPATH/src/path/to/code ablegen.

Was sind Pakete?

Go-Code ist in Paketen organisiert. Ein Paket repräsentiert alle Dateien in einem einzigen Verzeichnis auf der Festplatte. Ein Verzeichnis kann nur bestimmte Dateien desselben Pakets enthalten. Pakete werden zusammen mit allen vom Benutzer geschriebenen Go-Quelldateien unter dem Verzeichnis $GOPATH/src gespeichert. Wir können die Paketauflösung verstehen, indem wir verschiedene Pakete importieren.

Wenn unser Code im Verzeichnis $GOPATH/src/blue/red liegt, dann sollte der Paketname red lauten.

Die Importanweisung für das Paket red würde lauten:

import "blue/red"

Pakete, die in Quellcode-Repositories wie GitHub und BitBucket liegen, haben den vollständigen Ort des Repositories als Teil ihres Importpfades.

Zum Beispiel würden wir den Quellcode unter https://github.com/gobuffalo/buffalo mit folgendem Importpfad importieren:

import "github.com/gobuffalo/buffalo"

Daher würde sich dieser Quellcode an folgendem Ort auf der Festplatte befinden:

$GOPATH/src/github.com/gobuffalo/buffalo

Abschluss

In diesem Artikel haben wir GOPATH als eine Reihe von Ordnern besprochen, in denen Go unseren Quellcode erwartet, sowie was diese Ordner sind und was sie enthalten. Wir haben besprochen, wie man diesen Ort von der Vorgabe $HOME/go auf die Wahl des Benutzers ändern kann, indem man die Umgebungsvariable $GOPATH setzt. Schließlich haben wir besprochen, wie Go nach Paketen innerhalb dieser Ordnerstruktur sucht.

Die in Go 1.11 eingeführten Go-Module sollen Go-Workspaces und die GOPATH ersetzen. Es wird zwar empfohlen, mit der Verwendung von Modulen zu beginnen, aber einige Umgebungen, wie z. B. Unternehmensumgebungen, sind möglicherweise noch nicht bereit für die Verwendung von Modulen.

Das GOPATH ist einer der kniffligeren Aspekte beim Einrichten von Go, aber wenn es einmal eingerichtet ist, können wir es normalerweise vergessen.

Leave a Reply