有没有一种方法可以同时构建多个基于Go模块的项目?
在使用Go模块之前,我可以使用Go build编译我的有没有一种方法可以同时构建多个基于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
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
指令将被忽略
所有这些的目标都是使构建具有可复制性。使用您的模块的开发人员只能下载特定版本的依赖项。在
开始构建之前运行开始获取。//…
以获取依赖项。在开始构建之前运行开始获取。//…
以获取依赖项。