有没有一种方法可以同时构建多个基于Go模块的项目?

有没有一种方法可以同时构建多个基于Go模块的项目?,go,go-modules,Go,Go Modules,在使用Go模块之前,我可以使用Go build编译我的GOPATH中的所有内容。/… 如果我在包含多个基于模块的Go项目的目录根目录中尝试此操作,它不会下载Go.mod中指定的依赖项,也无法找到代码所依赖的包,因为它正在GOPATH中查找它们 我有126个基于模块的项目,我不想编写脚本来处理构建它们。不,没有一种方法可以仅使用go命令来实现这一点。编写此脚本或使用replace指令是一种方法。一个简单的脚本可能是: find "$(go env GOPATH)/src" \ -name ve

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

如果我在包含多个基于模块的Go项目的目录根目录中尝试此操作,它不会下载
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
,则可以
转到build example.com/bar/some/pkg
。但是,这不会使用您的本地副本
example.com/bar
;它会将该模块下载到您的模块缓存中(
$GOPATH/pkg/mod
),并从那里构建

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


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

不,只有使用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
,则可以
转到build example.com/bar/some/pkg
。但是,这不会使用您的本地副本
example.com/bar
;它会将该模块下载到您的模块缓存中(
$GOPATH/pkg/mod
),并从那里构建

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


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

开始构建之前运行
开始获取。//…
以获取依赖项。在
开始构建之前运行
开始获取。//…
以获取依赖项。