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?


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.


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é.


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

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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.