Mam trudności z zaimportowaniem lokalnego pliku go do innego pliku go.
Struktura mojego projektu jest podobna do poniższej
-samplego
--pkg
--src
---github.com
----xxxx
-----a.go
-----b.go
--bin
Próbuję zaimportować a.go do b.go. Wypróbowałem następujące,
import "a"
import "github.com/xxxx/a"
Żadne z nich nie zadziałało… Rozumiem, że muszę wtrącać się do GOPATH, ale nie mogłem tego zrobić dobrze. Obecnie mój GOPATH wskazuje na samplego (/ workspace / samplego). Otrzymuję poniższy błąd
cannot find package "a" in any of:
/usr/local/go/src/pkg/a (from $GOROOT)
/workspace/samplego/src/a (from $GOPATH)
Jak działa GOPATH, gdy te pliki źródłowe są importowane do innego projektu / modułu? Czy lokalny import byłby wtedy problemem? Jaka jest najlepsza praktyka w tym przypadku - czy jest to tylko jeden plik go w module (z powiązanymi testami)?
package a
deklarację u góry.)package foo
) I nadal nie muszą się nawzajem bezpośrednio importować. Ta odpowiedź zawiera nieco więcej informacji na temat modułów Go, w tym sposób importowania pakietów w tym samym module w sekcji Moduły Go.Odpowiedzi:
Dowolna liczba plików w katalogu to pojedynczy pakiet; symbole zadeklarowane w jednym pliku są dostępne dla innych bez żadnych
import
s lub kwalifikatorów. Wszystkie pliki wymagają tej samejpackage foo
deklaracji u góry (w przeciwnym razie pojawi się błądgo build
).Trzeba
GOPATH
zestaw do katalogu, w którym twoipkg
,src
ibin
katalogi zamieszkania. To tylko kwestia preferencji, ale często istnieje jeden obszar roboczy dla wszystkich aplikacji (czasami$HOME
), a nie jeden na aplikację.Normalnie ścieżka Github byłaby
github.com/username/reponame
(nie tylkogithub.com/xxxx
). Więc jeśli chcesz miećmain
i kolejny pakiet, możesz skończyć robiąc cośworkspace/src
podobnegogithub.com/ username/ reponame/ main.go // package main, importing "github.com/username/reponame/b" b/ b.go // package b
Pamiętaj, że zawsze importujesz pełną
github.com/...
ścieżkę: import względny nie jest dozwolony w obszarze roboczym. Jeśli znudzi Ci się wpisywanie ścieżek, użyjgoimports
. Jeśli sobie zgo run
tym poradziłeś , czas przejść nago build
:run
słabo radzi sobie z wieloma plikamimain
i nie zawracałem sobie głowy testowaniem, ale usłyszałem (od Dave'a Cheneya tutaj )go run
nie odbudowuje brudnych zależności.Wygląda na to, że przynajmniej próbowałeś ustawić GOPATH we właściwy sposób, więc jeśli nadal utkniesz, może uwzględnij dokładnie sposób ustawienia zmiennej środowiskowej (polecenie itp.) I jakie polecenie uruchomiłeś i jaki błąd się wydarzył. Oto instrukcje, jak to ustawić (i utrwalić ustawienie) w systemie Linux / UNIX, a tutaj są porady zespołu Go dotyczące konfiguracji obszaru roboczego . Może to nie pomaga, ale spójrz i przynajmniej wskaż, która część cię dezorientuje, jeśli jesteś zdezorientowany.
źródło
package main
deklarację do wszystkich plików w tym samym katalogu, ale mamundefined
błąd,main.go
nie widzę funkcji z pliku,controllers.go
który jest w tym samym katalogu.go run
, może być konieczne jawne przekazanie do niego obu nazw plików lub przełączenie się na umieszczenie ich w pakiecie w GOPATH i umieszczeniego build
go. Sprawdź również dwukrotnie, czy nie występują typowe błędy niezwiązane ze strukturą pakietu (takie jak wpisana literówka). Jeśli nic z tego nie rozwiązuje problemu, otworzę nowe pytanie ze wszystkimi możliwymi szczegółami; może to wymagać wielu dyskusji na temat tego, jak dokładnie wygląda twój katalog, pliki itp. do rozwiązania, a ponieważ dotyczy to konkretnie twojej konfiguracji, nowe pytanie wydaje się najlepszym miejscem do tego.Import nie jest konieczny, o ile zadeklarujesz oba
a.go
ib.go
będziesz w tym samym pakiecie. Następnie możesz użyćgo run
do rozpoznania wielu plików za pomocą:$ go run a.go b.go
źródło
w tym przypadku:
main.go import „./a”
Może wywołać funkcję z a.go i b.go, które mają pierwsze litery.
źródło
Chciałem tylko czegoś naprawdę podstawowego, aby przenieść niektóre pliki z głównego folderu, na przykład odpowiedź użytkownika 2889485, ale jego konkretna odpowiedź nie działała dla mnie. Nie obchodziło mnie, czy są w tym samym opakowaniu, czy nie.
Mój obszar roboczy GOPATH jest
c:\work\go
i pod tym mam/src/pg/main.go (package main) /src/pg/dbtypes.go (pakage dbtypes)
w
main.go
Iimport "/pg/dbtypes"
źródło