如何配置 go mod 以获得基于环境变量的 require 版本?

How to configure go mod to have a require version based on environment variable?

我有两个内部项目。

项目 1 - go.mod 文件

go github.com/company/project1
 
go 1.16

require github.com/company/project2 v1.1.0 // indirect

项目 2 - go.mod 文件

go github.com/company/project2
 
go 1.16

Project1 依赖于基于上述 go.mod 文件的 Project2。

当 Project2 跨多个环境时,它需要依赖不同版本的 Project1。
比如基于环境变量:

是否可以动态完成此操作而无需每次都修改 go.mod 文件?

Can this be done dynamically without modifying the go.mod file everytime ?

据我所知:您的部署过程应包括 go mod replace (as ) 以更新 project2 依赖项,具体取决于当前的部署环境。

如果该部署涉及 git 克隆,那么您可以考虑使用内容过滤器驱动程序 (illustrated here) 在结帐时自动执行该更改。

但是如果通过 Go 完成,那么 go mod replace 更好。


注:issue 27824go.mod:使用环境变量进行替换)由于实现复杂,已于 2019 年关闭。
Issue 33586go.mod:替换语句中支持~)仍然打开。