【问题标题】:How do I stop the auto importing of imported item in go outside of my project?如何停止在我的项目之外自动导入导入的项目?
【发布时间】:2021-03-29 03:33:04
【问题描述】:

我的项目有很多包,它们相互导入并导入外部包。当我对我的一个低杠杆包进行更改,然后将其推送到 git 时,它很好并且可以在该部分工作。当我将它用于另一个运行良好的项目时,我现在得到了这个错误:

module declares its path as: github.com/xdg-go/scram
    but was required as: github.com/xdg/scram

我的代码都没有直接使用其中任何一个。看起来它自动更新了一些较低的外部包并破坏了用于旧导入的东西。

如何找出导入错误名称的包或停止所有自动更新?

【问题讨论】:

    标签: go go-modules


    【解决方案1】:

    不幸的是,如果这个模块对你来说是一个间接依赖,最好的解决办法是更新你导入的任何直接导入它的项目。

    如果这不是一个选项,解决此错误的方法是在本地克隆有问题的存储库并在您的 go.mod 文件中使用 replace 指令:

    module mymodule
    
    replace github.com/xdg/stringprep => ../strprep
    
    go 1.16.2
    
    require (
        github.com/divjotarora/mgo v0.0.0-20190308170442-1d451d2a3149
    )
    

    其中../strprep 是所需模块的代码存在于本地计算机中的位置,相对于项目的go.mod 文件。

    当然,这样做的不利之处在于,您必须在计划 go get 模块的任何地方复制这个姑息修复。

    另请注意:

    • divjotarora/mgo 只是一个使用旧导入路径导入其中一个包的项目的随机示例。
    • 我以xdg/stringprep 为例,因为我找不到导入xdg/scram 的模块,但显然it suffers 来自同一问题

    另外,你可以使用:

    • go mod why <package> 找出为什么某个包被列为您项目的依赖项
    • go mod graph 显示完整的依赖关系图。输出为<package> <requirement> 格式

    【讨论】:

      【解决方案2】:

      github.com/xdg/scram 上的go.mod 文件将自己声明为github.com/xdg-go/scram:

      module github.com/xdg-go/scram
      
      go 1.11
      
      require (
        github.com/xdg-go/stringprep v1.0.2
        golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2
      )
      

      go.mod 文件应更新以反映正确的导入路径。

      【讨论】:

        猜你喜欢
        • 2015-10-28
        • 1970-01-01
        • 2016-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-17
        • 2014-09-10
        相关资源
        最近更新 更多