Ich bin neu in Golang. Wenn Sie ein neues Go-Projekt erstellen möchten, müssen Sie nur ein Verzeichnis erstellen. Dann zeigen wir die Umgebungsvariable GOPATH
auf dieses Verzeichnis. In diesem Verzeichnis erstellen wir die drei Unterverzeichnisse pkg
, src
und bin
. Wenn wir dann go get ...
ausführen, wird das Drittanbieterpaket im Unterverzeichnis installiert. Später, wenn ich ein anderes Go-Projekt erstellen möchte, erstelle ich ein neues Verzeichnis namens project2 und den Punkt GOPATH
auf project2. Zu diesem Zeitpunkt wird go get ...
das Paket von Drittanbietern im Unterverzeichnis von project2 herunterladen. Meine Frage ist, ob Go ein zentrales Repository hat? Wenn nicht, wird das gleiche Paket zweimal heruntergeladen, wenn sie in zwei verschiedenen Projekten verwendet werden. Ist das wahr?Verfügt golang über ein zentrales Repository für die heruntergeladenen Pakete von Drittanbietern?
Antwort
Es gibt kein zentrales Repository von Go-Paketen. Go sucht immer nach Paketen entweder in GOPATH oder GOROOT. gehen Sie einfach herunterladen Pakete mit Git oder Mercurial. Ich empfehle Ihnen, https://golang.org/doc/code.html und https://peter.bourgon.org/go-best-practices-2016/#repository-structure
GOPATH zu lesen sagt einfach Compiler gehen, wo für src
, pkg
Verzeichnisse zu suchen.
Später, wenn ich ein anderes Go Projekt erstellen möchten, erstelle ich ein neues Verzeichnis project2 und Punkt GOPATH genannt ... Meine Frage an project2 ist, ob Go ein zentrales Repository hat? Wenn nicht, wird das gleiche Paket zweimal heruntergeladen, wenn sie in zwei verschiedenen Projekten verwendet werden. Ist das wahr?
Nein, es gibt kein zentrales Repository für den Go-Code. Es ist jedoch auch nicht wahr, dass die Pakete immer zweimal heruntergeladen werden.
Das Missverständnis hier ist, dass GOPATH
verweist auf ein einzelnes Projekt: es tut nicht. Stattdessen zeigt GOPATH
auf eine Umgebung, wo alle Ihre Pakete leben; Es ist, wo go get
Pakete herunterladen wird, und wo go build
beim Bauen nach Paketen suchen wird.
Statt GOPATH
für jedes Projekt zu ändern, sollten Sie GOPATH
einmal festgelegt und in $GOPATH/src/
alle Ihre Projekte stellen (Ihre Projekte enthalten keine src/
Verzeichnis, gehen sie in das src/
Verzeichnis).
So könnte zum Beispiel der gesamte Baum wie folgt aussehen:
$GOPATH/src/bitbucket.org/ (or GitHub, or your website, or whatever)
├── YourProject
└── AnotherProject
Mit "zentrales Repository", meinst du einen einzigen lokalen Cache? Das ist dein GOPATH, und du kannst dasselbe GOPATH für mehrere Projekte verwenden. – JimB
Wenn ich an Projekt1 arbeite, zeige ich den GOPATH auf project1. Später arbeite ich an project2, sollte ich GOPATH auf project2 zeigen? Wenn dies der Fall ist, ist GOPATH kein lokaler Cache ... – user130268
GOPATH ist nicht die Wurzel Ihres Projekts. Ihr Projekt sollte sich auf seinem Importpfad unter '$ GOPATH/src' befinden. Siehe [Wie schreibe ich Go-Code] (https://golang.org/doc/code.html) – JimB