fehlerhafter Modulpfad "xxxx / xxxx / uuid" fehlender Punkt im ersten Pfadelement bei der Migration von GOPATH-basiertem dep zu go mod

12
$ go Version
1.13.3

Ich habe eine Ordnerstruktur wie folgt:

GOPATH
+---src
     +--- my-api-server
           +--- my-auth-server
                 +--- main.go
           +--- my-utils
                 +--- uuid
                       +--- uuid.go

my-auth-serververwendet my-api-server/my-utils/uuidals eine Abhängigkeit

Als ich das GOPATH-basierte Modulsystem verwendete, funktionierte dies einwandfrei. Aber wenn geht Module verwenden, wenn ich laufe go run main.goin my-auth-serverihm einen Fehler zurückgegeben:

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

Irgendeine Idee, wie man das löst?

Ayush Gupta
quelle
Siehe diese Antwort: stackoverflow.com/a/55347424/1218512
colminator

Antworten:

10

Die go.modDatei sollte sich im Stammverzeichnis Ihres Projekts befinden (in diesem Fall my-api-server/go.mod).

Der erste Teil des Modulpfads sollte eine Domäne / ein Pfad sein. Zum Beispiel könnte der vollständige Pfad sein github.com/your-github-username/my-api-server. Der Fehler, den Sie sehen, ist, dass der erste Teil keine Domain ist (mit einem Punkt). Sie müssen das Modul nicht veröffentlichen, um es zu entwickeln, aber Sie müssen einen richtigen Domainnamen verwenden.

Sobald Sie einen Modulpfad haben, können Sie in diesem Modul enthaltene Pakete unter Verwendung des vollständigen Modulpfads + "/" + des relativen Pfads des Pakets importieren. Zum Beispiel,

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

Da main.gound uuidim selben Modul enthalten sind, benötigen Sie keine requireAnweisung in dergo.mod Datei, um das uuidPaket zu verwenden. Sie können es wie jedes andere Paket importieren und es wird funktionieren.

Ich empfehle go build, die resultierende ausführbare Datei zu verwenden und auszuführen, anstatt sie zu verwendengo run sicherzustellen, dass Sie alle benötigten Dateien in den Erstellungsprozess einbeziehen.

Unter https://blog.golang.org/using-go-modules finden Sie eine exemplarische Vorgehensweise zur Verwendung von Go-Modulen, einschließlich des zweiten Beitrags in dieser Reihe zum Konvertieren eines Projekts zur Verwendung von Modulen.

Tyler Bui-Palsulich
quelle
1

Überprüfen Sie Ihre Importpfade in Ihrer main.go-Datei. Ich musste den gesamten Importpfad "github.com/[username‹/[project-name[/views" anstelle von [project-name] / views aufrufen, damit es auf meiner Seite funktioniert.

Nathaniel Rand
quelle
-1

WEIL GO DAS MODUL NICHT FINDEN KANN !!!

Legen Sie Ihr Projekt nicht in GOPATH ... das ist so verwirrend

Stattdessen...

in .bashrc setzen: export GO111MODULE = on

Schließen Sie alle Befehlszeilenterminals und öffnen Sie die Terminals erneut

Wechseln Sie zum Projektstammordner

$ go mod init project_module_name

Dadurch wird die Datei go.mod generiert

Installieren Sie Ihre Pakete mit der gewünschten Version: go get -v github.com/golang/[email protected]

Führen Sie dann $ aus go run main.go

Jetzt sollte die Datei go.mod die Paketversionen aufzeichnen, die Golang zum Ausführen und Erstellen verwendet ...

Stellen Sie sicher, dass Sie die richtigen Paketversionen verwenden, indem Sie die Datei go.mod überprüfen! Es sollte so aussehen: github.com/golang/protobuf v1.3.4

Russo
quelle
Do not put your project inside GOPATH... that is so confusing- Das ist eine Konvention, die ich besonders bevorzuge.
Ayush Gupta
Auch der Fehler ist missing dot in first path elementnichtcannot resolve module
Ayush Gupta
Ayush Gupta, der Fehler wird durch falsche Modulnutzung verursacht
Russo
Definieren incorrect?
Ayush Gupta
Falsche Paketversionen haben einen falschen Dateipfad => weil Golang nicht in der Lage ist, die richtige Datei zum Ausführen oder Erstellen zu finden
Russo