Edycja: Ścieżki względnego importu nie są sposobem na przejście w Go. Brak dokumentacji pokazuje coś na temat popularności ścieżek względnych i nie widzę powodu, aby z nich korzystać. Jego zalecana organizacja kodu działa całkiem nieźle. Każdy pakiet powinien mieć unikalną ścieżkę importu i być importowany wszędzie pod numerem przy użyciu tej samej ścieżki importu.
Zobacz, jak pakiet taki jak github.com/ha/doozerd/peer
imports its neighbors. Jest to powszechna praktyka wśród projektów Go i widziałem to już wiele razy. Pakiet camlistore.org/pkg/auth
(również na GitHub; napisany przez jednego z głównych autorów Go) importuje camlistore.org/pkg/netutil
pełną ścieżką.
Nawet jeśli masz zarówno polecenia, jak i biblioteki w tym samym projekcie, to podejście działa. W swoich pierwotnych pytaniach mądrze prosiłeś o najlepsze praktyki. Zrobiłem co w mojej mocy, aby wyjaśnić najlepsze praktyki w tej sprawie.
Ścieżki importu nie mogą być względne w ruchu. Polecam lekturę How to Write Go Code, niezbędnej lektury dotyczącej organizowania projektów Go. Oto krótki przegląd:
Utwórz katalog taki jak ~/go
dla swojego rozwoju Go. Wtedy mówią:
$ export GOPATH=~/go
$ mkdir $GOPATH/{src,bin,pkg}
$GOPATH/src
posiada kod źródłowy dla wszystkich pakietów odejść, nawet te, pobieranie z go get
. bin
i pkg
zachowaj dane wyjściowe kompilacji. Pakiety o nazwie pakietu main
są komendami i dają pliki wykonywalne, które przechodzą na $GOPATH/bin
. Inne pakiety to biblioteki, a ich skompilowane pliki obiektów są umieszczane w $GOPATH/pkg
.
Teraz, jeśli umieścisz swój kod w $GOPATH/src/matt/meme
, możesz go zaimportować przez import "matt/meme"
. Zaleca się użycie prefiksu dla nazw pakietów i pozostawienie krótkich nazw pakietów dla standardowych bibliotek. Dlatego użyłem $GOPATH/src/matt/meme
zamiast $GOPATH/src/meme
.
Uporządkuj swój kod wokół tego pomysłu.
Próbowałem tego na kilka różnych sposobów i nie widziałem niejednoznacznego błędu, o którym wspomniałeś. Czy masz na myśli, że znalazłeś niejednoznaczne sformułowanie lub że tekst wiadomości zawierał niejednoznaczne słowo. Dwa sposoby, które wypróbowałem to meme/cmd/meme w GOPATH, a następnie poza GOPATH. W obu przypadkach względna ścieżka importu działała dobrze dla mnie. Czy możesz podać więcej szczegółów na temat tego, co nie działa dla ciebie? – Sonia
@Sonia wypróbowałeś za pomocą narzędzia go? Dodam więcej szczegółów. –
Tak. W pewnym sensie założyłem, że masz paczkę w memu i plik wykonywalny w meme/cmd/meme. W przypadku GOPATH uruchom lub zainstaluj plik wykonywalny, który właśnie działał. Dla przypadku poza GOPATH skompilowałem pakiet memów za pomocą narzędzia go 6g i uruchom pakiet narzędzi. Import w głównym pakiecie musiał po prostu być ../../meme, wskazać na .a ale w przeciwnym razie przejdź do narzędzia 6g i idź do narzędzia 6l zbuduj działający plik wykonywalny, który uzyskał dostęp do pakietu. – Sonia