繁体   English   中英

有没有办法一次构建多个基于Go模块的项目?

[英]Is there a way to build multiple Go module based projects at once?

在使用Go模块之前,我可以使用go GOPATH go build ./...编译GOPATH所有内容。

如果我在具有多个基于模块的Go项目的目录的根目录中尝试此操作,则它不会下载go.mod指定的依赖go.mod并且由于在GOPATH寻找它们而无法找到代码所依赖的包。

我有126个基于模块的项目,我宁愿不必编写脚本来处理它们。

不,没有办法仅使用go命令来执行此操作。 为此编写脚本或使用replace指令。 一个简单的脚本可能是:

find "$(go env GOPATH)/src" \
  -name vendor -prune -o \
  -name go.mod -exec bash -c 'cd "$(dirname {})" && go build ./...' \;

每个go.mod文件都定义一个工作区,而go buildgo testgo listgo get命令仅适用于该工作区中的软件包。

在一个模块内,可以构建其他模块提供的软件包。 例如,如果您有一个路径为example.com/foo的模块,并且需要模块example.com/bar ,则go build example.com/bar/some/pkg 但是,这不会使用example.com/bar的本地副本; 它将将该模块下载到您的模块缓存( $GOPATH/pkg/mod )中,并从那里进行构建。

您可以使用replace指令使用另一个模块的本地副本。 这对于短期派生和相关模块的共同开发(通常在同一存储库中)非常有用。 但是, replace指令仅适用于编写它们的模块。 如果另一个模块需要您的模块,则replace指令将被忽略。

所有这些的目的是使构建可复制。 使用您的模块的开发人员将只能下载特定版本的依赖项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM