2016-07-26 6 views
3

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?

+0

Mit "zentrales Repository", meinst du einen einzigen lokalen Cache? Das ist dein GOPATH, und du kannst dasselbe GOPATH für mehrere Projekte verwenden. – JimB

+0

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

+3

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

Antwort

1

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