【问题标题】:How to change Go modules path?如何更改 Go 模块路径?
【发布时间】:2021-06-14 15:27:33
【问题描述】:

我有一个 github 存储库 github.com/user/somerepo

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

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

有没有go命令可以更新所有文件中的所有import语句?

【问题讨论】:

    标签: go go-modules


    【解决方案1】:

    go mod edit -replace 是你的朋友。

    来自文档 (Source):

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

    这是重要的部分:

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

    这里是负责替换的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

    【讨论】:

    • 我已经尝试过了,但我得到了 : unversioned new path must be local directory 作为响应。
    • 你如何管理你的 gopath ?您是否将存储库拉到本地文件目录中?
    • @prophecy :我更新了我的答案,解释了如何实现这一点....请确保您的存储库已映射到 GOPATH
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-12-05
      • 2011-01-11
      • 1970-01-01
      • 2019-09-29
      • 2013-02-23
      • 2021-07-16
      • 2016-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多