ruta del módulo con formato incorrecto "xxxx / xxxx / uuid" falta el punto en el primer elemento de ruta cuando se migra desde GOPATH basado en dep para ir a mod


12
$ go version
1.13.3

Tengo una estructura de carpetas de la siguiente manera:

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

my-auth-serverutiliza my-api-server/my-utils/uuidcomo dependencia

Ahora, cuando utilicé el sistema de módulos basado en GOPATH, funcionó bien. Pero cuando se utiliza módulos go, cuando corro go run main.goen el my-auth-serverque devolvió el error:

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

Alguna idea de como resolver esto?


Respuestas:


10

El go.modarchivo debe estar en la raíz de su proyecto (en este caso my-api-server/go.mod).

La primera parte de la ruta del módulo debe ser un dominio / ruta. Por ejemplo, la ruta completa podría ser github.com/your-github-username/my-api-server. El error que está viendo es porque la primera parte no es un dominio (con un punto). No tiene que publicar el módulo para desarrollarlo, pero debe usar un nombre de dominio adecuado.

Una vez que tenga una ruta de módulo, puede importar paquetes contenidos en ese módulo usando la ruta de módulo completa + "/" + la ruta relativa del paquete. Por ejemplo,

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

Dado main.goy uuidestán contenidos en el mismo módulo, usted no necesita una requiredeclaración en el go.modarchivo a utilizar el uuidpaquete. Puede importarlo como cualquier otro paquete y funcionará.

Recomiendo usar go buildy ejecutar el ejecutable resultante en lugar de usar go runpara asegurarse de incluir todos los archivos que necesita en el proceso de compilación.

Consulte https://blog.golang.org/using-go-modules para obtener un tutorial sobre cómo usar los módulos Go, incluida la segunda publicación de esa serie sobre cómo convertir un proyecto para usar módulos.


1

Verifique sus rutas de importación en su archivo main.go. Tuve que llamar a la ruta de importación completa "github.com/[usernamefont>/[project-namefont>/views en lugar de [project-name] / views para que funcione en mi extremo.


-1

PORQUE IR NO PUEDE ENCONTRAR EL MÓDULO !!!

No coloque su proyecto dentro de GOPATH ... eso es tan confuso

En lugar...

establecido en .bashrc: export GO111MODULE = on

cierre todos los terminales de línea de comando, luego vuelva a abrir los terminales

ir a la carpeta raíz del proyecto

$ go mod init nombre_módulo_proyecto

Esto generará el archivo go.mod

Instale sus paquetes con la versión que desee: go get -v github.com/golang/protobuf@v1.3.4

Luego ejecuta $ go run main.go

Ahora el archivo go.mod debería registrar las versiones del paquete que Golang usará para ejecutar y compilar ...

¡Asegúrese de estar utilizando las versiones de paquete correctas al verificar el archivo go.mod! Debería verse así: github.com/golang/protobuf v1.3.4


Do not put your project inside GOPATH... that is so confusing- Esa es una convención, que prefiero particularmente.
Ayush Gupta

Además, el error missing dot in first path elementno escannot resolve module
Ayush Gupta

Ayush Gupta, el error es causado por el uso incorrecto del módulo
Russo

Definir incorrect?
Ayush Gupta

las versiones incorrectas del paquete tienen una ruta de archivo incorrecta => causa que Golang no pueda encontrar el archivo correcto para ejecutarse o compilarse
Russo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.