当前位置: 首页 > 面试题库 >

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

郑富
2023-03-14
问题内容

在我的Go项目中,我想将一些通用功能分解为Go模块,与主项目分开。为了配合go的未来,我正在GOPATH之外进行此操作。我不想在GitHub或其他任何地方发布该模块。

我将这个模块导入主项目的所有尝试导致:

cannot find module for path X

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

module X

构建或安装此模块似乎无济于事。我在中没有发现任何迹象$GOPATH/pgk/mod

我尝试了多种导入语句:

  • import "X"
  • import "../x" (模块目录的相对路径)
  • import "../x/X" (目录+模块名称的路径)

救命!


问题答案:

因此,您编写了一个Go“库”模块:

  • 您不想在GitHub或其他地方发布
  • 您要导入并在项目中使用它(“主”模块)。

使用replace指令可以解决此问题。

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

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

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

要从模块 X 导入软件包 util : __

import "X/util"

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

说明

Go的模块功能是为公开发布的模块设计的。通常,模块的名称既是其唯一标识符,又是其公共存储库的路径。当您的go.mod使用require指令声明模块依赖关系时,Go会自动在该路径中查找并检索模块的指定版本。

(另请参阅“
Go模块”常见问题解答,我可以在本地文件系统上完全在VCS之外工作吗?)

例如,如果您的go.mod文件包含require github.com/some/dependency v1.2.3,Go将在该路径下从GitHub检索模块。但是,如果包含require X v0.0.0,则“
X”不是实际路径,您将得到错误cannot find module for path X

replace指令允许您为给定的模块标识符和版本指定替换路径。您有很多原因要这样做,例如在将模块的更改推送到公共仓库之前测试它们。但您也可以使用它将模块标识符绑定到您不想发布的本地代码。

希望这可以帮助。



 类似资料:
  • 问题内容: 我正在python 2.7中开发自己的模块。它位于而不是或中。内部结构为: 包括课程。我遇到导入问题: 我没有将PythonPath设置为包括我的,因此,当server.http尝试包含client.PyCachedClient时,它将尝试从相对路径加载它并失败。我的问题是- 我应该如何以良好的pythonic方式设置所有路径/设置?我知道每次打开控制台并尝试运行服务器时都可以在she

  • 本文向大家介绍python根据路径导入模块的方法,包括了python根据路径导入模块的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python根据路径导入模块的方法,分享给大家供大家参考。具体方法如下: 常规做法如下: 而要直接通过路径 使用时使用util.method,此时并没有定义method method = util.method后才可以直接用method 希望本文所述对大

  • 项目目录映像 我正在尝试使用以下语法在我的react应用程序中导入firebase: 从.../Firebase/config导入{auth} 但我面临以下问题: ./src/Pages/Login/Login.js模块未找到:无法解决.../Firebase/config 这是我的配置文件 从“/firebase/app”导入*firebase/auth”作为firebase;导入“fireba

  • 在Spring中,可以在单独的模块中定义bean依赖项,然后在运行时通过解析这些依赖项。在Quarkus中有可能做类似的事情吗? 例如,多模块设置如下所示: 在Spring中,可以在模块中定义,该模块通过其当前上下文的在运行时解析具体的依赖关系,或,允许在测试时注入虚拟或测试依赖关系,还有生产人工制品中的真品。 例如,中的一个类需要一个的实例。的实现在或模块中定义。模块不直接依赖于或模块。 一些代

  • 问题内容: 给定完整路径,如何加载Python模块?请注意,该文件可以在文件系统中的任何位置,因为它是配置选项。 问题答案: 对于Python 3.5+,请使用: 对于Python 3.3和3.4,请使用: (尽管在Python 3.4中已弃用此功能。) 对于Python 2,请使用: 编译后的Python文件和DLL具有等效的便捷功能。

  • 问题内容: 给定Python模块的完整路径,如何加载它?注意,该文件可以位于文件系统中的任何位置,因为它是一个配置选项。 问题答案: 对于Python 3.5+,请使用: 对于Python 3.3和3.4,请使用: (尽管在Python 3.4中已弃用此功能。) 对于Python 2,请使用: 编译后的Python文件和DLL具有等效的便捷功能。