使用“ go get”下载二进制文件而不将其添加到go.mod

使用“ go get”下载二进制文件而不将其添加到go.mod,第1张

使用“ go get”下载二进制文件而不将其添加到go.mod

希望在Go 1.14中会出现一个新的标志

goget
,它完全符合您的要求。在问题#30515 “ cmd /
go:提供一致的全局安装命令”中对此进行了跟踪。

在此之前,您有几种不同的选择。

转到1.12和1.13:更改目录

如果您使用的是Go 1.12或更高版本,则最简单的解决方案可能是将当前模块外部移至目录,而无需

go.mod
先执行
go get
,例如:

$ cd /tmp        $ go get github.com/foo/bar@v1.2.3$ cd -          # return to prior directory
Go 1.11、1.12、1.13+:gobin

gobin是安装或运行二进制文件的模块感知命​​令,它提供了更多的灵活性,包括无需更改当前模块的即可进行安装的能力

go.mod
。有关更多详细信息,请参见
gobin

自述文件和常见问题解答。

转1.11:临时模块

如果您将Go 1.11与模块一起使用,则第一步可能是升级到Go 1.12或1.13,因为模块有很多改进。如果需要使用Go
1.11,并且希望使用

@version
语法而不更新当前模块的
go.mod
,则一种方法是创建一个临时模块:

cd $(mktemp -d) && go mod init tempmod && go get github.com/foo/bar@v1.2.3

这是因为在Go 1.11中,

@version
除非您位于模块中,否则无法使用该语法,而在Go
1.12中已放松了该模块。通过@rogpeppe的一个简单的shell脚本,该方法已实现自动化。

额外细节

通常,

go
模块模块中的命令始终根据调用该
go
命令时的当前工作目录确定它在“模块”中。(您可以比喻
make
没有任何args的情况下如何在当前工作目录中查找makefile,或者从历史上看,
gobuild
没有任何args的情况如何将构建当前工作目录,等等)。

使用模块,

go get
可以
go.mod
在当前工作目录或其任何父目录中查找文件,
goget
并将使用其中列出的约束
go.mod
作为求解版本的一部分,并根据
go.mod
需要更新
goget
。这就是为什么从现有模块中
go.mod
运行文件时会更新文件的原因
go get

另一方面,从Go
1.12开始,如果您位于不属于任何模块的目录中(即,该目录中没有

go.mod
,也没有其任何父目录),则没有
go.mod
更新,但是该
go
命令仍然可以在模块模式下运行并使用
@version
语法。

从Go 1.12发行说明中:

当GO111MODULE设置为on时,go命令现在支持模块目录外部的模块感知 *** 作,前提是这些 *** 作不需要解析相对于当前目录的导入路径或显式编辑go.mod文件。诸如go
get,go list和go mod
download之类的命令的行为就像在具有最初为空的要求的模块中一样。在这种模式下,转到环境GOMOD报告系统的空设备(/ dev /
null或NUL)。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5427917.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存