代码之家  ›  专栏  ›  技术社区  ›  Inigo

如何解决“找不到路径X的模块”导入本地Go模块的问题?

  •  2
  • Inigo  · 技术社区  · 7 年前

    我将此模块导入主项目的所有尝试都会导致:

    cannot find module for path X
    

    我已经跑了 go mod init X 在模块的文件夹中。其内容 go.mod

    module X
    

    构建或安装此模块似乎没有任何作用。我没有发现它的踪迹 $GOPATH/pgk/mod .

    我尝试过各种导入语句:

    1 回复  |  直到 7 年前
        1
  •  25
  •   Inigo    7 年前

    所以你写了一个Go“library”模块:

    • 您不想在GitHub或其他地方发布

    使用 replace 解决这个问题的指令。

    给定您所称的模块名“X”,在主模块中添加以下行:

    require "X" v0.0.0
    replace "X" v0.0.0 => "{local path to the X module}"
    

    路径应该指向模块的根目录,可以是绝对路径,也可以是相对路径。

    导入包 使用 从模块

    import "X/util"
    

    (不导入模块。从模块导入包。)


    解释

    Go's module functionality 是为公开发布的模块设计的。通常,模块的名称既是其唯一标识符,也是其公共repo的路径。当你的 go.mod require 指令,Go将自动在该路径中查找并检索指定版本的模块。

    (另请参见Go模块常见问题解答, Can I work entirely outside of VCS on my local filesystem? )

    go.mod 文件包含 require github.com/some/dependency v1.2.3 ,Go将在该路径上从GitHub检索模块。但如果它包含 require X v0.0.0 cannot find module for path X

    这个 代替 指令允许您为给定的模块标识符和版本指定替换路径。有 many reasons you'd want to do this ,例如在将模块的更改推送到公共回购之前测试这些更改。但您也可以使用它将模块标识符绑定到不打算发布的本地代码。

    希望这有帮助。

    推荐文章