如何更改Go模块路径?

时间:2020-06-07 08:57:58

标签: go go-modules

我有一个github回购 github.com/user/somerepo

我通过执行go mod init **github.com/user/somerepo**

来初始化它

我需要更改此依赖关系,并使其指向另一个github存储库。假设: github.com/user/a-different-repo

是否有任何go命令可以更新所有文件中的所有import语句?

2 个答案:

答案 0 :(得分:1)

go mod edit -replace是您的朋友。

从文档(Source):

-replace = old [@v] = new [@v]标志添加给定的替换项 模块路径和版本对。如果在old @ v中省略了@v,则 替换,没有添加左侧版本,

这是重要的部分:

适用于旧模块路径的所有版本。如果@v在 省略new @ v,新路径应为本地模块根目录 目录,而不是模块路径。请注意,-replace会覆盖任何 旧[@v]的多余替代品,因此省略@v将删除现有的 替换特定版本。

这里是AddReplace func,负责替换。

现在要实现它,您的每个存储库都必须映射到您的GOPATH。 回想一下GOPATH:

当您希望存储库成为“ go gettable”软件包时,应将此存储库映射到您的GOPATH。

As explained here,当您执行go get时,它将首先在$GOPATH中查找软件包的最新版本(如果您在旅途中指定了特定版本,则为特定版本)。 mod文件)

然后您可以通过执行以下命令来完成编辑:

go mod edit -replace github.com/UserA/foo@v0.1=github.com/UserA/bar@v0.1

另一种方法(也许是更好的方法)是在go.mod文件中执行此操作,如:

  module foo.bar                        

  replace github.com/UserA/foo => github.com/UserA/bar

  require (   
  github.com/UserA/foo v0.0.1
 )   

当然,仅当每个存储库都映射到您的GOPATH中时,此方法才有效。

有关更多说明,请参见此处:when-should-i-use-the-replace-directive

答案 1 :(得分:-1)

go mod edit -module github.com/user/a-different-repo

相关问题