źle zniekształcona ścieżka modułu „xxxx / xxxx / uuid” brak kropki w pierwszym elemencie ścieżki podczas migracji z dep opartej na GOPATH do mod


12
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-serverwykorzystuje my-api-server/my-utils/uuidjako 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.gow my-auth-serverniej 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ć?


Odpowiedzi:


10

go.modPlik powinien znajdować się w katalogu głównym projektu (w tym przypadku my-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,

import "github.com/your-github-username/my-api-server/my-utils/uuid"

Ponieważ main.goi uuidsą zawarte w tym samym module, nie potrzebujesz requireinstrukcji w go.modpliku, aby użyć uuidpakietu. Możesz go zaimportować jak każdy inny pakiet i będzie działać.

Zalecam używanie go buildi uruchamianie wynikowego pliku wykonywalnego zamiast używania, go runaby 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.


1

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.


-1

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/protobuf@v1.3.4

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


Do not put your project inside GOPATH... that is so confusing- To konwencja, którą szczególnie wolę.
Ayush Gupta

Również błąd missing dot in first path elementnie jestcannot resolve module
Ayush Gupta

Ayush Gupta, błąd jest spowodowany nieprawidłowym użyciem modułu
Russo

Zdefiniować incorrect?
Ayush Gupta

niepoprawne wersje pakietów mają niepoprawną ścieżkę pliku => powodują, że Golang nie może znaleźć poprawnego pliku do uruchomienia lub kompilacji
Russo
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.