首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >安装go工具的go模块

安装go工具的go模块
EN

Stack Overflow用户
提问于 2018-11-19 04:09:13
回答 7查看 35.7K关注 0票数 29

我正在使用go模块作为依赖关系管理,我在安装以下内容时遇到了问题:

代码语言:javascript
运行
复制
go get -u github.com/go-critic/go-critic/...

上述结果如下:

代码语言:javascript
运行
复制
go: cannot find main module; see 'go help modules'
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2018-11-20 22:12:43

编辑:这里的原始答案特别提到了Go 1.11中的工具状态。自从Go 1.12发布以来,这已经不再准确了。有关Go 1.12及更高版本中处理此情况的详细信息,请参阅https://stackoverflow.com/a/57317864/11210494及其链接。

如果GO111MODULE变量设置为on,则必须在初始化的go模块目录树中使用go get,即使您试图获得一个工具而不是一个新的依赖项。这是一个众所周知并引起激烈争论的问题:

https://github.com/golang/go/issues/27643

https://github.com/golang/go/issues/24250

https://github.com/golang/go/issues/25922

短期的解决方案是运行GO111MODULE=off go get <tool>。这将显式地禁用模块支持,即使您目前在模块包中,并且强制它只使用您的GOPATH。

长期而言,找出通过go get (或其他命令,如带标志的go install )来支持工具安装的最佳解决方案是一个正在进行的讨论领域,目前还没有形成共识。但是,Go 1.12有一个PR开,如果被接受,它将允许go get在模块外工作,即使在GO111MODULE=on设置下也是如此。

票数 17
EN

Stack Overflow用户

发布于 2019-08-01 22:44:30

这里的其他几个答案在这一点上已经过时了。

至少有两个案件需要考虑:

案例1

您希望安装一个工具,但不希望修改当前的go.mod来将该工具作为依赖项进行跟踪。

简而言之,对于Go 1.12或1.13,最简单的解决方案是对没有cd的目录进行go.mod,例如:

代码语言:javascript
运行
复制
$ cd /tmp
$ go get github.com/some/tool@v1.0.1

或者,戈宾是一个安装或运行二进制文件的模块感知命令,它提供了额外的灵活性,包括在不改变当前模块的go.mod的情况下安装的能力。

有关更多细节,请参见此相关的回答,包括Go 1.11的解决方案,以及Go 1.14中可能的新选项,用于在不更新go.mod的情况下获得工具。

案例2

另一方面,如果您想在go.mod中显式地将一个工具跟踪为一个版本化的依赖项,那么可以在模块wiki上看到“如何跟踪模块的工具依赖关系?”常见问题。

简而言之,您可以在一个单独的包中创建一个tools.go文件,并设置一个// +build tools构建标记,例如:

代码语言:javascript
运行
复制
// +build tools

package tools

import (
    _ "golang.org/x/tools/cmd/stringer"
)

导入语句允许go命令在模块的go.mod中精确记录工具的版本信息,而// +build tools构建约束则阻止正常构建实际导入工具。

票数 17
EN

Stack Overflow用户

发布于 2021-03-03 04:57:52

我也面临着同样的问题,并通过以下命令解决了这个问题。

$ go env -w GO111MODULE=auto

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53368187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档