ź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ć?

Ayush Gupta
źródło
Zobacz tę odpowiedź: stackoverflow.com/a/55347424/1218512
kolminator

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.

Tyler Bui-Palsulich
źródło
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.

Nathaniel Rand
źródło
-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/[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

Russo
źródło
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