从基于GOPATH的dep迁移到mod时,格式错误的模块路径“ xxxx / xxxx / uuid”在第一个路径元素中缺少点


12
$ go版本
1.13.3

我的文件夹结构如下:

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

my-auth-server使用my-api-server/my-utils/uuid作为depenency

现在,当我使用基于GOPATH的模块系统时,它可以正常工作。但是当使用go模块时,当我go run main.gomy-auth-server其中运行时返回错误:

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

任何想法如何解决这个问题?


Answers:


10

go.mod文件应位于项目的根目录(在本例中为my-api-server/go.mod)。

模块路径的第一部分应该是域/路径。例如,完整路径可能是github.com/your-github-username/my-api-server。您看到的错误是因为第一部分不是域(带有句点)。您不必发布模块来开发它,但是您需要使用适当的域名。

一旦有了模块路径,就可以使用完整的模块路径+“ /” +软件包的相对路径来导入该模块中包含的软件包。例如,

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

由于main.gouuid包含在同一个模块中,因此您无需requirego.mod文件中声明即可使用uuid包。您可以像导入其他任何软件包一样将其导入,它将起作用。

我建议使用go build并运行生成的可执行文件,而不要使用go run来确保在构建过程中包括了所有需要的文件。

有关如何使用Go模块的演练,请参见https://blog.golang.org/using-go-modules,包括该系列文章中的第二篇有关如何将项目转换为使用模块的文章。


1

检查main.go文件上的导入路径。我必须将整个导入路径称为“ github.com/ [用户名] / [项目名称] / views”,而不是“ [项目名称] / views”,以使其最终起作用。


-1

因为无法找到模块!!!

不要将您的项目放在GOPATH中...这是如此令人困惑

代替...

在.bashrc中设置:export GO111MODULE = on

关闭所有命令行终端,然后重新打开终端

转到项目根文件夹

$ go mod init project_module_name

这将生成go.mod文件

使用所需的版本安装软件包: go get -v github.com/golang/protobuf@v1.3.4

然后运行$ go run main.go

现在,go.mod文件应记录Golang用于运行和构建的软件包版本。

通过检查go.mod文件,确保您使用的软件包版本正确!它应该看起来像:github.com/golang/protobuf v1.3.4


Do not put your project inside GOPATH... that is so confusing-这是一个惯例,我特别喜欢。
Ayush Gupta

此外,错误missing dot in first path element不是cannot resolve module
Ayush Gupta

Ayush Gupta,该错误是由于模块使用不正确引起的
Russo

定义incorrect
Ayush Gupta

不正确的软件包版本具有不正确的文件路径=>导致Golang无法找到要运行或构建的正确文件
Russo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.