[英]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 build
, go test
, go list
, go 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.