一尘不染

如何覆盖go模块中的依赖项?

go

在其中,dep您可以选择覆盖依赖项,并使其指向其他存储库,例如在以下https://github.com/kubermatic/glog-
logrus库中,您需要在Gopkg.toml文件中添加以下几行:

[[override]]
  name = "github.com/golang/glog"
  source = "github.com/kubermatic/glog-logrus"

然后在代码库中import "github.com/golang/glog。但是,在go模块中,我看不到这样的选择吗?这使我认为唯一的解决方案是将import更改为github.com/kubermatic/glog- logrus

谢谢!


阅读 273

收藏
2020-07-02

共1个答案

一尘不染

这就是replace指令的目的。

引用Wiki Go
1.11模块:我何时应该使用replace指令?

replace指令允许您提供另一个导入路径,该路径可能是VCS(GitHub或其他地方)中的另一个模块,或者是具有相对或绝对文件路径的本地文件系统上的另一个模块。replace使用指令中的新导入路径,而无需更新实际源代码中的导入路径。

因此,将其添加到go.mod您的主模块文件中:

replace (
    github.com/golang/glog => github.com/kubermatic/glog-logrus v0.0.0
)

您还可以指示该go工具为您进行此修改:

go mod edit -replace github.com/golang/glog=github.com/kubermatic/glog-logrus@v0.0.0

(使用您感兴趣的版本。)

在此之后,当您导入时github.com/golang/gloggithub.com/kubermatic/glog- logrus将被使用(无需更改导入语句)。

2020-07-02