格式错误 module 路径 "xxxx/xxxx/uuid" 从基于 GOPATH 的 dep 迁移到 go mod 时第一个路径元素中缺少点
malformed module path "xxxx/xxxx/uuid" missing dot in first path element when migrating from GOPATH based dep to go mod
$ go version
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
作为依赖项
现在,当我使用基于 GOPATH 的模块系统时,它运行良好。但是当使用 go modules 时,当我 运行 go run main.go
in my-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
知道如何解决这个问题吗?
go.mod
文件应该位于项目的根目录(在本例中为 my-api-server/go.mod
)。
模块路径的第一部分应该是domain/path。例如,完整路径可能是 github.com/your-github-username/my-api-server
。您看到的错误是因为第一部分不是域(带句点)。您不必发布模块来开发它,但您需要使用适当的域名。
获得模块路径后,您可以使用完整模块路径 + “/” + 包的相对路径导入该模块中包含的包。例如,
import "github.com/your-github-username/my-api-server/my-utils/uuid"
由于 main.go
和 uuid
包含在同一个模块中,您不需要 go.mod
文件中的 require
语句来使用 uuid
包。您可以像导入任何其他包一样导入它,它会起作用。
我建议使用 go build
和 运行 生成的可执行文件而不是使用 go run
以确保在构建过程中包含所有需要的文件。
请参阅该系列中的 https://blog.golang.org/using-go-modules for a walkthrough of how to use Go modules, including the second post,了解如何将项目转换为使用模块。
检查 main.go 文件中的导入路径。
我不得不调用整个导入路径:
github.com/[username]/[project-name]/views
而不是:
[project-name]/views
让它对我有效。
因为 GO 找不到模块!!!
不要把你的项目放在 GOPATH 中...那太混乱了
而是...
在 .bashrc 中设置:export GO111MODULE=on
关闭所有命令行终端,然后重新打开终端
转到项目根文件夹
$ 去 mod 初始化 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
如果您尝试使用全局包(非标准包),包名的第一部分应该有一个点('.')。可能需要点('.'),就像它在任何 URL 中所做的那样,在这种情况下 github.com...这将其标记为远程包。
如果你想使用本地包,那么你需要使用go module,那么第一部分就是你的go module的名称(你在go module初始化时使用的名称)。
示例(根据问题):
转到项目根文件夹(在本例中为 ../src$
)& 运行 以下命令
go mod init myapiserver
这将创建一个 go.mod & go.sum 文件。
然后要导入uuid,你可以简单地在import
中使用myapiserver/my-utils/uuid
import "myapiserver/my-utils/uuid"
那么 uuid.go
中的所有 public 函数(以大写字母开头)都可以在当前文件中访问
升级 go 版本到最新或大于 1.16.1。
go version >=1.16.1 (required)
对于 mac -
brew update
brew upgrade golang
对于 linux -
删除现有的 go,并安装最新的。
这对我有用。
$ go version 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
作为依赖项
现在,当我使用基于 GOPATH 的模块系统时,它运行良好。但是当使用 go modules 时,当我 运行 go run main.go
in my-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
知道如何解决这个问题吗?
go.mod
文件应该位于项目的根目录(在本例中为 my-api-server/go.mod
)。
模块路径的第一部分应该是domain/path。例如,完整路径可能是 github.com/your-github-username/my-api-server
。您看到的错误是因为第一部分不是域(带句点)。您不必发布模块来开发它,但您需要使用适当的域名。
获得模块路径后,您可以使用完整模块路径 + “/” + 包的相对路径导入该模块中包含的包。例如,
import "github.com/your-github-username/my-api-server/my-utils/uuid"
由于 main.go
和 uuid
包含在同一个模块中,您不需要 go.mod
文件中的 require
语句来使用 uuid
包。您可以像导入任何其他包一样导入它,它会起作用。
我建议使用 go build
和 运行 生成的可执行文件而不是使用 go run
以确保在构建过程中包含所有需要的文件。
请参阅该系列中的 https://blog.golang.org/using-go-modules for a walkthrough of how to use Go modules, including the second post,了解如何将项目转换为使用模块。
检查 main.go 文件中的导入路径。
我不得不调用整个导入路径:
github.com/[username]/[project-name]/views
而不是:
[project-name]/views
让它对我有效。
因为 GO 找不到模块!!!
不要把你的项目放在 GOPATH 中...那太混乱了
而是...
在 .bashrc 中设置:export GO111MODULE=on
关闭所有命令行终端,然后重新打开终端
转到项目根文件夹
$ 去 mod 初始化 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
如果您尝试使用全局包(非标准包),包名的第一部分应该有一个点('.')。可能需要点('.'),就像它在任何 URL 中所做的那样,在这种情况下 github.com...这将其标记为远程包。
如果你想使用本地包,那么你需要使用go module,那么第一部分就是你的go module的名称(你在go module初始化时使用的名称)。
示例(根据问题):
转到项目根文件夹(在本例中为 ../src$
)& 运行 以下命令
go mod init myapiserver
这将创建一个 go.mod & go.sum 文件。
然后要导入uuid,你可以简单地在import
中使用myapiserver/my-utils/uuid
import "myapiserver/my-utils/uuid"
那么 uuid.go
中的所有 public 函数(以大写字母开头)都可以在当前文件中访问
升级 go 版本到最新或大于 1.16.1。
go version >=1.16.1 (required)
对于 mac -
brew update
brew upgrade golang
对于 linux - 删除现有的 go,并安装最新的。
这对我有用。