如何更改Go模块路径?

Ary*_*nik 14 go go-modules

我有一个 github 仓库github.com/user/somerepo

我通过这样做来初始化它go mod init **github.com/user/somerepo**

我需要更改此依赖关系并使其指向另一个 github 存储库。比方说:github.com/user/a- Different-repo

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

jos*_*faz 14

go mod edit -replace是你的朋友。

来自文档(来源):

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

这是重要的部分:

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

这是负责替换的AddReplace 函数。

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

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

正如这里所解释的,当你这样做时go get,它会首先在你的$GOPATH包中查找最新版本的包(或者特定版本,如果你在 go.mod 文件中指定了它)

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

go mod edit -replace github.com/UserA/foo@v0.1=github.com/UserA/bar@v0.1
Run Code Online (Sandbox Code Playgroud)

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

  module foo.bar                        

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

  require (   
  github.com/UserA/foo v0.0.1
 )   
Run Code Online (Sandbox Code Playgroud)

当然,只有当每个存储库都映射到您的 GOPATH 时,这才有效。

另请参阅此处以获取进一步说明:when-should-i-use-the-replace-directive


Mic*_*ang 8

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