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?


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.


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.


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

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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.