chemin de module mal formé "xxxx / xxxx / uuid" point manquant dans le premier élément de chemin lors de la migration de dep basé sur GOPATH vers go mod

12
$ go version
1.13.3

J'ai une structure de dossiers comme suit:

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

my-auth-serverutilise my-api-server/my-utils/uuidcomme dépendance

Maintenant, quand j'ai utilisé le système de modules basé sur GOPATH, cela a bien fonctionné. Mais lors de l' utilisation des modules aller, quand je lance go run main.godans my-auth-serverson retour d' erreur:

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

Aucune idée sur la façon de résoudre ça?

Ayush Gupta
la source
Voir cette réponse: stackoverflow.com/a/55347424/1218512
colminator

Réponses:

10

Le go.modfichier doit être à la racine de votre projet (dans ce cas, my-api-server/go.mod).

La première partie du chemin du module doit être un domaine / chemin. Par exemple, le chemin complet peut être github.com/your-github-username/my-api-server. L'erreur que vous voyez est que la première partie n'est pas un domaine (avec un point). Vous n'avez pas à publier le module pour le développer, mais vous devez utiliser un nom de domaine correct.

Une fois que vous avez un chemin de module, vous pouvez importer des packages contenus dans ce module en utilisant le chemin de module complet + "/" + le chemin relatif du package. Par exemple,

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

Depuis main.goet uuidsont contenus dans le même module, vous n'avez pas besoin d'une requireinstruction dans le go.modfichier pour utiliser le uuidpackage. Vous pouvez l'importer comme n'importe quel autre package et cela fonctionnera.

Je recommande d'utiliser go buildet d'exécuter l'exécutable résultant plutôt que de l'utiliser go runpour vous assurer d'inclure tous les fichiers dont vous avez besoin dans le processus de génération.

Voir https://blog.golang.org/using-go-modules pour une procédure pas à pas sur l'utilisation des modules Go, y compris le deuxième article de cette série sur la conversion d'un projet en modules.

Tyler Bui-Palsulich
la source
1

Vérifiez vos chemins d'importation sur votre fichier main.go. J'ai dû appeler l'intégralité du chemin d'importation "github.com/[nom_utilisateur/10/−nom-projet94/views au lieu de [nom-projet] / vues pour que cela fonctionne de mon côté.

Nathaniel Rand
la source
-1

PARCE QUE GO NE PEUT PAS TROUVER LE MODULE !!!

Ne mettez pas votre projet dans GOPATH ... c'est tellement déroutant

Au lieu...

défini dans .bashrc: export GO111MODULE = on

fermez tous les terminaux de ligne de commande, puis rouvrez les terminaux

allez dans le dossier racine du projet

$ go mod init nom_module_projet

Cela va générer un fichier go.mod

Installez vos packages avec la version que vous souhaitez: go get -v github.com/golang/[email protected]

Exécutez ensuite $ go run main.go

Maintenant, le fichier go.mod devrait enregistrer les versions du package que Golang utilisera pour exécuter et construire ...

Assurez-vous que vous utilisez les versions de package correctes en vérifiant le fichier go.mod! Il devrait ressembler à: github.com/golang/protobuf v1.3.4

Russo
la source
Do not put your project inside GOPATH... that is so confusing- C'est une convention que je préfère particulièrement.
Ayush Gupta
En outre, l'erreur n'est missing dot in first path elementpascannot resolve module
Ayush Gupta
Ayush Gupta, l'erreur est causée par une utilisation incorrecte du module
Russo
Définir incorrect?
Ayush Gupta
les versions de paquet incorrectes ont un chemin de fichier incorrect => parce que Golang n'a pas pu trouver le bon fichier à exécuter ou à construire
Russo