Wersja $ go 1.13.3
Mam następującą strukturę folderów:
GOPATH
+---src
+--- my-api-server
+--- my-auth-server
+--- main.go
+--- my-utils
+--- uuid
+--- uuid.go
my-auth-server
wykorzystuje my-api-server/my-utils/uuid
jako zależność
Teraz, kiedy korzystałem z systemu modułów opartego na GOPATH, działało to dobrze. Jednak przy użyciu odchodzenie modułów, kiedy uruchomić go run main.go
w my-auth-server
niej zwrócił błąd:
build command-line-arguments: cannot load my-api-server/my-utils/uuid: malformed module path "my-api-server/my-utils/uuid": missing dot in first path element
Masz pomysł, jak to rozwiązać?
go
go-modules
Ayush Gupta
źródło
źródło
Odpowiedzi:
go.mod
Plik powinien znajdować się w katalogu głównym projektu (w tym przypadkumy-api-server/go.mod
).Pierwsza część ścieżki modułu powinna być domeną / ścieżką. Na przykład pełna ścieżka może być
github.com/your-github-username/my-api-server
. Błąd, który widzisz, ponieważ pierwsza część nie jest domeną (z kropką). Nie musisz publikować modułu, aby go rozwinąć, ale musisz użyć właściwej nazwy domeny.Po utworzeniu ścieżki modułu możesz importować pakiety zawarte w tym module, używając pełnej ścieżki modułu + „/” + względnej ścieżki pakietu. Na przykład,
Ponieważ
main.go
iuuid
są zawarte w tym samym module, nie potrzebujeszrequire
instrukcji wgo.mod
pliku, aby użyćuuid
pakietu. Możesz go zaimportować jak każdy inny pakiet i będzie działać.Zalecam używanie
go build
i uruchamianie wynikowego pliku wykonywalnego zamiast używania,go run
aby upewnić się, że uwzględniono wszystkie potrzebne pliki w procesie kompilacji.Zobacz https://blog.golang.org/using-go-modules, aby dowiedzieć się, jak korzystać z modułów Go, w tym drugi post z tej serii o konwertowaniu projektu do korzystania z modułów.
źródło
Sprawdź ścieżki importu w pliku main.go. Musiałem nazwać całą ścieżkę importu „github.com/[nazwa_użytkownika//propro--nazwa_sprost/views zamiast [nazwa-projektu] / views, aby działała na moim końcu.
źródło
PONIEWAŻ GO NIE MOŻNA ZNALEŹĆ MODUŁU !!!
Nie umieszczaj swojego projektu w GOPATH ... to takie mylące
Zamiast...
ustawiony w .bashrc: eksport GO111MODULE = włączony
zamknij wszystkie zaciski wiersza poleceń, a następnie ponownie otwórz zaciski
przejdź do folderu głównego projektu
$ go mod init nazwa_modułu_projektu
Spowoduje to wygenerowanie pliku go.mod
Zainstaluj swoje pakiety w żądanej wersji:
go get -v github.com/golang/[email protected]
Następnie uruchom $
go run main.go
Teraz plik go.mod powinien rejestrować wersje pakietu, których użyje Golang do uruchomienia i kompilacji ...
Upewnij się, że używasz poprawnych wersji pakietu, sprawdzając plik go.mod! Powinno to wyglądać następująco: github.com/golang/protobuf v1.3.4
źródło
Do not put your project inside GOPATH... that is so confusing
- To konwencja, którą szczególnie wolę.missing dot in first path element
nie jestcannot resolve module
incorrect
?