6 回答
TA贡献1833条经验 获得超4个赞
我有同样的问题,它“几乎”直接解决了。起初它没有用。这是因为模块已经初始化,并且我在设置 GO111MODULE=on 之前运行了“go get...”命令。
为了让它工作,我删除了“go.mod”,通过运行“go mod init ...”重新初始化了 mod,然后重新运行必要的“go get ...”命令。
TA贡献1802条经验 获得超5个赞
刚刚在 go1.11.2 上遇到了同样的问题。试图设置GO111MODULE=on
,但这无法解决。
我的解决方案:
升级以使用 go 1.12.5
这可以解决
go: cannot find main module; see 'go help modules'
问题。然后我遇到了另一个问题
go: cannot use path@version syntax in GOPATH mode
,这可以解决设置环境
GO111MODULE=on
TA贡献1773条经验 获得超3个赞
编辑: 这里的原始答案特别提到了 Go 1.11 中工具的状态。自 Go 1.12 发布以来,这不再准确。
如果GO111MODULE
var 设置为on
,您必须在初始化的 go 模块目录树中才能使用go get
,即使您试图获取工具而不是新的依赖项也是如此。
短期的解决方案是运行GO111MODULE=off go get <tool>
. 这明确地禁用了模块支持,即使你当前在模块包中,并强制它只使用你的 GOPATH。
从长远来看,找出支持工具安装的最佳解决方案是什么go get
(或其他命令,例如go install
带有标志)是一个持续讨论的领域,目前还没有达成共识。然而,有一个针对 Go 1.12 的PR 打开,如果被接受,将允许go get
在模块外部简单地工作,即使使用GO111MODULE=on
set。
TA贡献1803条经验 获得超6个赞
在这一点上,这里的其他几个答案已经过时了。
至少有两种情况需要考虑:
情况1
您想要安装一个工具,但又不想修改您的当前工具go.mod
以将该工具作为依赖项进行跟踪。
简而言之,对于 Go 1.12 或 1.13,最简单的解决方案是转到cd
一个没有 . 的目录go.mod
,例如:
$ cd /tmp $ go get github.com/some/tool@v1.0.1
或者,gobin是一个模块感知命令,用于安装或运行二进制文件,它提供了额外的灵活性,包括在不改变当前模块的情况下安装的能力go.mod
包括 Go 1.11 的解决方案,以及 Go 1.14 中可能的新选项,用于在不更新您的go.mod
.
案例二
另一方面,如果您想在您的 中将工具作为版本化依赖项明确跟踪go.mod
简而言之,您tools.go
在单独的包中创建一个文件,并设置一个// +build tools
构建标签,例如:
// +build tools
package tools
import (
_ "golang.org/x/tools/cmd/stringer"
)
import 语句允许go命令在模块的 中精确记录工具的版本信息go.mod,而// +build tools构建约束阻止您的正常构建实际导入您的工具。
TA贡献1790条经验 获得超9个赞
使用Go 1.12(2019 年 2 月),GO111MODULE=on go get
将起作用。
(来自issue 24250)
模块
当
GO111MODULE
设置为 时on
,该go
命令现在支持模块目录外的模块感知操作,前提是这些操作不需要解析相对于当前目录的导入路径或显式编辑文件go.mod
。、和 等
命令的行为就像在具有初始空要求的模块中一样。 在此模式下,报告系统的空设备(或)。go get
go list
go mod download
go env GOMOD
/dev/null
NUL
- 6 回答
- 0 关注
- 156 浏览
添加回答
举报