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?

Ayush Gupta
fonte
Veja esta resposta: stackoverflow.com/a/55347424/1218512
colminator

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.

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

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

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

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