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?

Ayush Gupta
fuente
Vea esta respuesta: stackoverflow.com/a/55347424/1218512
colminador el

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.

Tyler Bui-Palsulich
fuente
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.

Nathaniel Rand
fuente
-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/[email protected]

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

Russo
fuente
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