Was ist eine gute beste Praxis mit Go-Arbeitsbereiche?
Ich bin gerade erst in das lernen Gehen, und das Lesen durch bestehenden code zu lernen", wie andere es tun". Dabei ist die Verwendung einer go "Arbeitsbereich", zumal es bezieht sich auf ein Projekt Abhängigkeiten, scheint zu sein, alle über dem Platz.
Was (oder gibt es) eine gemeinsame best-practice-um mit einem oder mehreren Go-Arbeitsbereiche (z.B. Definitionen von $GOPATH) während der Arbeitszeit auf verschiedene Projekte Gehen? Sollte ich erwarten, dass ein einzelnes Go-Arbeitsbereich, der die Art, wie ein zentrales repository der code für alle meine Projekte, oder explizit break it up und set-up $GOPATH als ich zur Arbeit gehen auf jedes dieser Projekte (wie eine Art von python-virtualenv)?
- Dies ist noch eine wichtige Frage in der community, und es gibt immer noch keine endgültige Antwort über die beste Weg, es zu tun.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, es ist einfacher, eine
$GOPATH
pro Projekt, auf diese Weise können Sie verschiedene Versionen des gleichen Pakets für verschiedene Projekte, und aktualisieren Sie die Pakete, wie benötigt werden.Mit einem zentralen repository, es ist schwierig, um ein Paket zu aktualisieren, da Sie brechen könnte ein anderes Projekt, wenn dies zu tun (wenn das update-Paket hat wichtige änderungen oder neue bugs).
GOPATH
pro Projekt extrem einfach. Siehe meine Antwort weiter unten für einige der Vorteile.Ich verwendet, um mehrere GOPATHs -- Dutzende, in der Tat. Das Umschalten zwischen den Projekten und die Pflege der Abhängigkeiten war viel schwieriger, weil das ziehen in ein nützliches update in einem Arbeitsbereich erforderlich, dass ich es in den anderen, und manchmal habe ich vergessen, und meinen Kopf kratzen, Frage mich, warum dieser Abhängigkeit arbeitet in einem Projekt, aber nicht die andere. Fiasko.
Ich habe jetzt nur eine GOPATH und ich tatsächlich alle meine dev-Projekte - Go-oder nicht - innerhalb der it. Mit einem zentralen Arbeitsbereich, ich kann noch immer jedes Projekt in seinem eigenen git-repository (
src/<whatever>
) und verwenden von git-Verzweigungen zum verwalten der Abhängigkeiten, wenn nötig (in der Praxis sehr selten).Meine Empfehlung: die Verwendung von nur einem Arbeitsbereich, oder vielleicht auch zwei (wie wenn Sie brauchen, um zu halten, zum Beispiel, die Arbeit und den persönlichen code mehr getrennt, obwohl die empfohlene package-Pfad naming convention soll das für Sie tun).
Mithilfe einer GOPATH über alle Ihre Projekte ist sehr praktisch, aber ich finde, dass dies nur der Fall für meine persönlichen Projekte.
Verwende ich eine separate GOPATH für jedes Produktionssystem ich beibehalten, weil ich mit git Submodule in jedem GOPATH Verzeichnis-Baum, um zu frieren Abhängigkeiten.
Also, so etwas wie:
Durch Einstellung GOPATH zu ~/code/my-project, dann verwendet er die Abhängigkeit und Abhängigkeit-zwei git-Submodule in das Projekt, anstatt die globalen Abhängigkeiten.
Wenn Sie nur auf
GOPATH
zu$HOME/go
oder ähnlich und starten Sie die Arbeit, alles funktioniert out of the box und ist wirklich einfach.Wenn Sie viel
GOPATH
s mit vielen bin dirs für viele Projekte mit vielen gemeinsamen Abhängigkeiten in verschiedenen erhaltungszustände Sie sind, wie sollte ziemlich offensichtlich sein, macht die Dinge schwieriger auf sich selbst. Das ist nur mehr Arbeit.Wenn Sie feststellen, dass, bei Gelegenheit, Sie zu isolieren müssen einige Dinge beachtet, kann man eine separate
GOPATH
zu behandeln, die situation.Aber im Allgemeinen, wenn Sie finden, sich selbst mehr Arbeit, es ist oft, weil Sie-Auswahl, um die Dinge schwieriger.
Habe ich, was muss sein nähert sich 100 Projekte, die ich angesammelt haben in den letzten vier Jahren gehen. Ich arbeite fast immer in
GOPATH
, die$HOME/go
auf meinem Computer.Versuchen envirius (universal virtuellen Umgebungen-manager). Es ermöglicht das kompilieren einer beliebigen version von
go
und erstellen Sie eine beliebige Anzahl von Umgebungen, die auf ihm basieren.$GOPATH
/$GOROOT
sind, hängt vom jeweiligen Umgebung.Darüber hinaus ermöglicht das erstellen von Umgebungen mit gemischten Sprachen (zum Beispiel
python
&go
in einer-Umgebung).In meiner Firma, die ich erstellt Virtualgo, um das verwalten von mehreren
GOPATH
s super einfach. Ein paar Vorteile gegenüber der Handhabung manuell:GOPATH
wenn Siecd
zu einem Projekt.GOPATH
als backup. Wenn ein Paket nicht gefunden wird in der Projekt spezifischen Arbeitsbereich sucht der wichtigstenGOPATH
.Einem Arbeitsbereich + godep ist am besten für mich.
Möchten Sie vielleicht versuchen, die
direnv
Paket.https://direnv.net/
Verwenden Sie einfach GoSwitch. Spart verdammt viel Zeit und Nerven.
Fügen Sie das Skript in das Stammverzeichnis der einzelnen Projekte und Quelle.
Es wird das Projekt dir Ihre gopath und auch hinzufügen/entfernt den genauen Ordner bin des Projekts Weg.
https://github.com/buffonomics/goswitch