Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
格式不正确的模块路径“;xxxx/xxxx/uuid“;从基于GOPATH的dep迁移到go mod时,第一个path元素中缺少点_Go_Go Modules - Fatal编程技术网

格式不正确的模块路径“;xxxx/xxxx/uuid“;从基于GOPATH的dep迁移到go mod时,第一个path元素中缺少点

格式不正确的模块路径“;xxxx/xxxx/uuid“;从基于GOPATH的dep迁移到go mod时,第一个path元素中缺少点,go,go-modules,Go,Go Modules,my auth server使用my api server/my utils/uuid作为依赖项 现在,当我使用基于GOPATH的模块系统时,它工作得很好。但是当使用go模块时,当我在my auth server中运行go run main.go时,它返回错误: GOPATH +---src +--- my-api-server +--- my-auth-server +--- main.go +--- my

my auth server
使用
my api server/my utils/uuid
作为依赖项

现在,当我使用基于GOPATH的模块系统时,它工作得很好。但是当使用go模块时,当我在
my auth server
中运行
go run main.go
时,它返回错误:

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

你知道如何解决这个问题吗?

这个
go.mod
文件应该位于项目的根目录下(在这种情况下,
myapi服务器/go.mod

模块路径的第一部分应该是域/路径。例如,完整路径可能是
github.com/your github username/my api 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
由于
main.go
uuid
包含在同一个模块中,因此在
go.mod
文件中不需要
require
语句即可使用
uuid
包。您可以像导入任何其他包一样导入它,它将正常工作

我建议使用
go-build
并运行生成的可执行文件,而不是使用
go-run
,以确保在构建过程中包含所需的所有文件


有关如何使用Go模块的演练,请参阅,包括该系列中有关如何将项目转换为使用模块的内容。

检查main.Go文件中的导入路径

我必须调用整个导入路径:

import "github.com/your-github-username/my-api-server/my-utils/uuid"
而不是:

github.com/[username]/[project-name]/views

让它在我这边工作。

因为GO找不到模块

不要将您的项目放在GOPATH中。。。这太令人困惑了

相反

在.bashrc中设置:export GO111MODULE=on

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

转到项目根文件夹

$go mod init项目\模块\名称

这将生成go.mod文件

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

然后运行$
go运行main.go

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


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

如果您试图使用全局包(非标准),那么包名的第一部分应该有一个点('.')。可能像在任何URL中一样需要点('.'),在本例中是github.com…,它将其标记为远程包

如果您想使用本地包,那么您需要使用go模块,那么第一部分将是您go模块的名称(您在go模块初始化期间使用的名称)

示例(根据问题): 转到项目根文件夹(在本例中为
。/src$
)&运行以下命令

[project-name]/views 
这将创建一个go.modgo.sum文件

然后要导入uuid,只需在导入中使用
myapiserver/my-utils/uuid

go mod init myapiserver

然后,
uuid.go
中的所有公共函数(以大写字母开头)都可以在当前文件中访问

请参见以下答案:
不要将项目放在GOPATH中。。。这太让人困惑了
-这是一个惯例,我特别喜欢。另外,错误是第一个路径元素中
缺少点
而不是
无法解析模块
Ayush Gupta,该错误是由不正确的模块使用导致的。错误的软件包版本具有不正确的文件路径=>导致Golang无法找到要运行或生成的正确文件
go mod init myapiserver
import "myapiserver/my-utils/uuid"