如何更改 Go 模块路径?
How to change Go modules path?
我得到了一个 github 存储库 github。com/user/somerepo。
我通过 go mod init **github.com/user/somerepo**
初始化它
我需要更改此依赖项并使其指向另一个 github 存储库。比方说:github.com/user/a-different-repo。
有没有go命令可以更新所有文件中的所有导入语句?
go mod edit -replace
是你的朋友。
来自文档 (Source) :
The -replace=old[@v]=new[@v] flag adds a replacement of the given
module path and version pair. If the @v in old@v is omitted, a
replacement without a version on the left side is added,
这是重要的部分:
which applies to all versions of the old module path. If the @v in
new@v is omitted, the new path should be a local module root
directory, not a module path. Note that -replace overrides any
redundant replacements for old[@v], so omitting @v will drop existing
replacements for specific versions.
这里是负责替换的AddReplace func
现在要实现它,您的每个存储库都必须映射到您的 GOPATH。
关于 GOPATH 的一点回忆:
当你想要一个存储库成为一个 "go gettable" 包时,你应该将这个存储库映射到你的 GOPATH。
As explained here 当您执行 go get
时,它会首先在您的 $GOPATH
中查找并获取最新版本的包(或特定版本,如果您在go.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
go mod edit -module github.com/user/a-different-repo
我得到了一个 github 存储库 github。com/user/somerepo。
我通过 go mod init **github.com/user/somerepo**
我需要更改此依赖项并使其指向另一个 github 存储库。比方说:github.com/user/a-different-repo。
有没有go命令可以更新所有文件中的所有导入语句?
go mod edit -replace
是你的朋友。
来自文档 (Source) :
The -replace=old[@v]=new[@v] flag adds a replacement of the given module path and version pair. If the @v in old@v is omitted, a replacement without a version on the left side is added,
这是重要的部分:
which applies to all versions of the old module path. If the @v in new@v is omitted, the new path should be a local module root directory, not a module path. Note that -replace overrides any redundant replacements for old[@v], so omitting @v will drop existing replacements for specific versions.
这里是负责替换的AddReplace func
现在要实现它,您的每个存储库都必须映射到您的 GOPATH。 关于 GOPATH 的一点回忆:
当你想要一个存储库成为一个 "go gettable" 包时,你应该将这个存储库映射到你的 GOPATH。
As explained here 当您执行 go get
时,它会首先在您的 $GOPATH
中查找并获取最新版本的包(或特定版本,如果您在go.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
go mod edit -module github.com/user/a-different-repo