caminho ausente do módulo "xxxx / xxxx / uuid" do módulo malformado no elemento do primeiro caminho ao migrar do dep baseado em GOPATH para ir para o mod


12
Versão $ go
1.13.3

Eu tenho uma estrutura de pastas da seguinte maneira:

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

my-auth-serverusa my-api-server/my-utils/uuidcomo uma dependência

Agora, quando eu usei o sistema de módulo baseado em GOPATH, isso funcionou bem. Mas quando se utiliza módulos ir, quando eu corro go run main.goem my-auth-serverque retornou um erro:

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

Alguma idéia de como resolver isso?


Respostas:


10

O go.modarquivo deve estar na raiz do seu projeto (neste caso, my-api-server/go.mod).

A primeira parte do caminho do módulo deve ser um domínio / caminho. Por exemplo, o caminho completo pode ser github.com/your-github-username/my-api-server. O erro que você está vendo é porque a primeira parte não é um domínio (com um ponto). Você não precisa publicar o módulo para desenvolvê-lo, mas precisa usar um nome de domínio adequado.

Depois de ter um caminho do módulo, você pode importar pacotes contidos nesse módulo usando o caminho completo do módulo + "/" + o caminho relativo do pacote. Por exemplo,

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

Como main.goe uuidestá contido no mesmo módulo, você não precisa de uma requiredeclaração no go.modarquivo para usar o uuidpacote. Você pode importá-lo como qualquer outro pacote e ele funcionará.

Eu recomendo usar go builde executar o executável resultante em vez de usá go run-lo para garantir que você inclua todos os arquivos necessários no processo de compilação.

Consulte https://blog.golang.org/using-go-modules para obter uma explicação de como usar os módulos Go, incluindo a segunda postagem dessa série sobre como converter um projeto para usar módulos.


1

Verifique seus caminhos de importação no seu arquivo main.go. Eu tive que chamar o caminho de importação inteiro "github.com/[usernameername/[project-name.la/views em vez de [nome do projeto] / views para fazê-lo funcionar do meu lado.


-1

PORQUE NÃO PODE ENCONTRAR O MÓDULO !!!

Não coloque seu projeto dentro do GOPATH ... isso é tão confuso

Em vez de...

definido em .bashrc: export GO111MODULE = on

feche todos os terminais da linha de comando e reabra os terminais

vá para a pasta raiz do projeto

$ go mod init project_module_name

Isso irá gerar o arquivo go.mod

Instale seus pacotes com a versão que você deseja: go get -v github.com/golang/protobuf@v1.3.4

Em seguida, execute $ go run main.go

Agora, o arquivo go.mod deve registrar as versões do pacote que o Golang usará para executar e compilar ...

Verifique se você está usando as versões corretas do pacote, verificando o arquivo go.mod! Ele deve se parecer com: github.com/golang/protobuf v1.3.4


Do not put your project inside GOPATH... that is so confusing- Essa é uma convenção, que eu particularmente prefiro.
Ayush Gupta 19/03

Além disso, o erro missing dot in first path elementnão écannot resolve module
Ayush Gupta 19/03

Ayush Gupta, o erro é causado pelo uso incorreto do módulo
Russo

Definir incorrect?
Ayush Gupta 19/03

versões de pacote incorretas têm caminho de arquivo incorreto => faz com que Golang não consiga encontrar o arquivo correto para executar ou criar
Russo
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.