2012-04-12 14 views
52

Mam problemy ze zrozumieniem przepływu pracy dla tworzenia projektu go z pakietami lokalnymi.Go, pobierz, zainstaluj, pakiety lokalne i kontrola wersji

Załóżmy, że tworzę nowy projekt, używając git do kontroli wersji, który ma plik main.go i plik tools.go, który będzie w pakiecie utils. Mam więc strukturę katalogów, takich jak ten:

/myproject/ 
    main.go 
    utils/ 
    tools.go 

main.go wygląda następująco:

package main 
import "./utils" 
func main() { 
    utils.DoSomthing() 
} 

i tools.go wygląda następująco:

package utils; 
func DoSomething() { 
} 

Wszystko działa dobrze lokalnie, przy użyciu przejdź do budowania i i uruchom. Ale jest to hostowane na githubie i chciałbym, aby inni mogli użyć polecenia do pobrania polecenia. Tak więc import lokalnego pakietu musi zostać zmieniony, aby używał formatu "github.com/user/project/utils", który działa, z wyjątkiem teraz mam dwie kopie kodu źródłowego, a prawdziwym problemem jest to, że kopia z historią git ma import, który korzysta z pobranej kopii. Więc jeśli pracuję nad kopią z historią git, wszelkie zmiany dokonane na tools.go będą niezauważone, ponieważ będą korzystać z pobranej kopii.

Zastanawiam się, czy ktoś może wytłumaczyć prawidłowy sposób korzystania z , aby uzyskać, kontrolę wersji i import pakietów w ramach tego samego projektu.

Odpowiedz

81

Właśnie napisałem krótki przewodnik krok po kroku, w jaki sposób używam nowych go tool i github.com. może się przydać:

1. Skonfiguruj GOPATH

Możesz ustawić zmienną środowiskową GOPATH w dowolnym katalogu, który Ci odpowiada. Jeśli masz większe projekty, prawdopodobnie dobrym pomysłem jest utworzenie innego GOPATH dla każdego z nich. Polecam to podejście szczególnie w przypadku wdrożenia, aby aktualizacja biblioteki dla projektu A nie przerwała projektu B, co może wymagać wcześniejszej wersji tej samej biblioteki.

Należy również pamiętać, że można ustawić GOPATH na listę katalogów oddzielonych dwukropkami.Więc możesz mieć GOPATH zawierający wszystkie powszechnie używane pakiety i oddzielne GOPATHS dla każdego projektu z dodatkowymi pakietami lub różnymi wersjami istniejących pakietów.

Ale jeśli nie pracujesz jednocześnie nad wieloma różnymi projektami Go, prawdopodobnie wystarczy mieć lokalnie tylko jednego GOPATH. Więc stwórzmy jeden:

mkdir $HOME/gopath 

Następnie trzeba ustawić dwie zmienne środowiskowe powiedzieć go tool gdzie można go znaleźć istniejące pakiety iść i gdzie należy go zainstalować nowe. Najlepiej jest dodać następujące dwie linie do swojej ~/.bashrc lub ~/.profile (i nie zapomnij przeładować .bashrc później).

export GOPATH="$HOME/gopath" 
export PATH="$GOPATH/bin:$PATH" 

2. Tworzenie nowego projektu

Jeśli chcesz utworzyć nowy projekt Go, który powinien znajdować się w github.com później, należy utworzyć ten projekt pod $GOPATH/src/github.com/myname/myproject. Ważne jest, aby ścieżka odpowiadała adresowi URL repozytorium github.com, ponieważ narzędzie go będzie zgodne z tą samą konwencją. Więc stwórzmy katalog główny projektu i zainicjować nowe repozytorium git tam:

mkdir -p $GOPATH/src/github.com/myname/myproject 
cd $GOPATH/src/github.com/myname/myproject 
git init 

Bo nie lubię, aby wpisać takie długie ścieżki, ja zwykle tworzyć dowiązania symboliczne dla projektów Obecnie pracuję w moim katalogu domowym :

ln -s $GOPATH/src/github.com/myname/myproject ~/myproject 

3. Napisz aplikacja

zacząć pisać i nie zapomnij git add i git commit plików. Ponadto nie używaj względnych importów, takich jak import "./utils" dla podpakietów. Są one obecnie nieudokumentowane i nie powinny być w ogóle używane, ponieważ nie będą działać z narzędziem go. Zamiast tego użyj importu takiego jak github.com/myname/myproject/utils.

4. opublikować swój projekt

Tworzenie new repository at github.com, przesłać SSH klucza publicznego, jeśli jeszcze tego nie zrobiłeś, że przed i pchania zmian do zdalnego repozytorium:

git remote add origin [email protected]:myname/myproject.git 
git push origin master 

5 Kontynuuj pracę nad projektem

Jeśli ustawiłeś GOPATH w pliku .bashrc i utworzyłeś dowiązanie symboliczne do swojego projektu w folderze domowym możesz po prostu wpisać cd myproject/ i edytować tam niektóre pliki. Następnie możesz zatwierdzić zmiany za pomocą git commit -a i wysłać je do github.com, wykonując git push.

+3

Sam się o tym dowiedziałem. Zacząłem robić pojedyncze GOPATH i dowiązać do nich moje projekty. W ten sposób mogę łatwo budować, ale utrzymywać rzeczywiste projekty we własnych repozytoriach. Wydaje się, że do tej pory było to całkiem czyste podejście. – jdi

+0

Ścieżka Github zwykle jest długa i jestem leniwy, więc dodałem alias do mojego bashrc: 'alias g =" cd /home/me/goroot/src/github.com/me/ "'. Teraz mogę skracać do moich projektów za pomocą prostego polecenia g. –

+0

W jaki sposób monitorujesz zewnętrzne zależności, z których korzystają twoje pakiety? – mohi666

10

Prawdopodobnie nie chcesz dwóch kopii źródła. Po ścieżce How to Write Go Code powinieneś mieć ścieżkę do miejsca, w którym będziesz rozwijać program Go, powiedzmy "godev", a pod nim katalog "src", a pod nim "github.com/user/project" i "github.com/user/project/utils ". (Zgadzam się, wydaje się to trochę sztywne, ale zaletą, którą nam wyjaśniliśmy, jest wolność od plików make.) Ditch the myproject, to jest miejsce, w którym wykonasz swoją pracę.

Będziesz miał GOPATH ustawiony na co najmniej godev, ale prawdopodobnie będziesz chciał, aby twój GOPATH zaczął od ścieżki do zewnętrznych pakietów, które nie są twoje. Na przykład GOPATH, którego używam, to <my place on the file system>/goext:<my place on the file system>/godev.

Masz rację, że import w main.go powinien przeczytać „github.com/user/project/utils.

Nie martw się go dostać lub którykolwiek z wędruje nadpisywania plików lub brudząc Dzięki GOPATH widzą, gdzie pracujesz i wiedzą, jak działa kontrola wersji.

+0

miałem podobnych problemów i był następujący swoje wytyczne tutaj, ale teraz jestem coraz „pętli import” błąd. Mam swoje źródło w \ godev \ src \ github.com \ user \ project, a projekt importuje "github.com/user/project". – Alec

+1

Twój projekt nie powinien próbować się importować. Po przejściu przez powyższy przykładowy kod nadal, twój główny program powinien importować "github.com/user/project/utils". – Sonia

4

Jeśli chcesz zachować kod w lokalnym repozytorium wersji, po prostu wpisz swój kod w GOPATH.

GOPATH akceptuje wiele ścieżek. np. Linux

GOPATH=$HOME/go:$HOME/prj/foo 

Tak, można go dostać 3rd pakiety firm zainstalowane w $ HOME/GO/src/... I, można zachować swój kod kontrolowanej w $ HOME/PRJ/foo/src.

ref: go help gopath

+0

To! Lub odpowiedź Soni. – user7610