为了账号安全,请及时绑定邮箱和手机立即绑定

去模块安装去工具

去模块安装去工具

Go
慕的地10843 2023-05-08 17:51:12
我正在使用 go modules 作为依赖管理,我在安装这样的东西时遇到了问题:go get -u github.com/go-critic/go-critic/...上面的结果是:go: cannot find main module; see 'go help modules'
查看完整描述

6 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

我有同样的问题,它“几乎”直接解决了。起初它没有用。这是因为模块已经初始化,并且我在设置 GO111MODULE=on 之前运行了“go get...”命令。

为了让它工作,我删除了“go.mod”,通过运行“go mod init ...”重新初始化了 mod,然后重新运行必要的“go get ...”命令。


查看完整回答
反对 回复 2023-05-08
?
慕后森

TA贡献1802条经验 获得超5个赞

刚刚在 go1.11.2 上遇到了同样的问题。试图设置GO111MODULE=on,但这无法解决。

我的解决方案:

  1. 升级以使用 go 1.12.5

    这可以解决go: cannot find main module; see 'go help modules'问题。

  2. 然后我遇到了另一个问题go: cannot use path@version syntax in GOPATH mode

    这可以解决设置环境GO111MODULE=on



查看完整回答
反对 回复 2023-05-08
?
慕容3067478

TA贡献1773条经验 获得超3个赞

编辑: 这里的原始答案特别提到了 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。


查看完整回答
反对 回复 2023-05-08
?
慕码人8056858

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构建约束阻止您的正常构建实际导入您的工具。


查看完整回答
反对 回复 2023-05-08
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

我遇到了同样的问题并通过以下命令解决了它。

$ go env -w GO111MODULE=自动


查看完整回答
反对 回复 2023-05-08
?
富国沪深

TA贡献1790条经验 获得超9个赞

使用Go 1.12(2019 年 2 月),GO111MODULE=on go get将起作用。
(来自issue 24250)

模块

GO111MODULE设置为 时on,该go命令现在支持模块目录外的模块感知操作,前提是这些操作不需要解析相对于当前目录的导入路径或显式编辑文件go.mod。、和 等
命令的行为就像在具有初始空要求的模块中一样。 在此模式下,报告系统的空设备(或)。go getgo listgo mod download
go env GOMOD/dev/nullNUL


查看完整回答
反对 回复 2023-05-08
  • 6 回答
  • 0 关注
  • 156 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信