去模块安装去工具

我正在使用 go modules 作为依赖管理,我在安装这样的东西时遇到了问题:

go get -u github.com/go-critic/go-critic/...

上面的结果是:

go: cannot find main module; see 'go help modules'


慕的地10843
浏览 157回答 6
6回答

潇潇雨雨

我有同样的问题,它“几乎”直接解决了。起初它没有用。这是因为模块已经初始化,并且我在设置 GO111MODULE=on 之前运行了“go get...”命令。为了让它工作,我删除了“go.mod”,通过运行“go mod init ...”重新初始化了 mod,然后重新运行必要的“go get ...”命令。

慕后森

刚刚在 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

慕容3067478

编辑: 这里的原始答案特别提到了 Go 1.11 中工具的状态。自 Go 1.12 发布以来,这不再准确。如果GO111MODULEvar 设置为on,您必须在初始化的 go 模块目录树中才能使用go get,即使您试图获取工具而不是新的依赖项也是如此。短期的解决方案是运行GO111MODULE=off go get <tool>. 这明确地禁用了模块支持,即使你当前在模块包中,并强制它只使用你的 GOPATH。从长远来看,找出支持工具安装的最佳解决方案是什么go get(或其他命令,例如go install带有标志)是一个持续讨论的领域,目前还没有达成共识。然而,有一个针对 Go 1.12 的PR 打开,如果被接受,将允许go get在模块外部简单地工作,即使使用GO111MODULE=onset。

慕码人8056858

在这一点上,这里的其他几个答案已经过时了。至少有两种情况需要考虑:情况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 toolspackage toolsimport (    _ "golang.org/x/tools/cmd/stringer")import 语句允许go命令在模块的 中精确记录工具的版本信息go.mod,而// +build tools构建约束阻止您的正常构建实际导入您的工具。

至尊宝的传说

我遇到了同样的问题并通过以下命令解决了它。$ go env -w GO111MODULE=自动

富国沪深

使用Go 1.12(2019 年 2 月),GO111MODULE=on go get将起作用。(来自issue 24250)模块当GO111MODULE设置为 时on,该go命令现在支持模块目录外的模块感知操作,前提是这些操作不需要解析相对于当前目录的导入路径或显式编辑文件go.mod。、和 等命令的行为就像在具有初始空要求的模块中一样。 在此模式下,报告系统的空设备(或)。go getgo listgo mod downloadgo env GOMOD/dev/nullNUL
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go