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

如何在另一个模块中使用“ GOPATH”之外的模块?

夏侯林
2023-03-14
问题内容

我已使用以下命令“ go mod init database”在“数据库”文件夹中的“ GOPATH”之外创建了个人使用的模块库,但我不知道:

  • 如何在其他模块中使用/ 导入 该模块?

操作系统: Windows 7 ,Go: v1.11


问题答案:

最简单,database可行的现成解决方案是将您的包/模块放入VCS(例如github.com),因此其他包(在其他模块内部)可以通过导入来简单地引用它:

import "github.com/someone/database"

如果这样做,您甚至不必go.mod手动摆弄文件,go工具将处理所有事情:它将自动识别并解决此依赖关系,下载并安装所需的软件包,并且还将go.mod自动更新。

完全保留在本地磁盘上

如果您不想使用VCS(例如,您只是在试验,或者尚未决定使用什么),那么仍然可以使用。该 如何
在官方详细的我能完全工作外VCS在我的本地文件系统中:转到维基?

因此,您在database之外创建了一个文件夹GOPATH,并在其中创建了一个模块。然后,您创建了另一个模块,我们称之为main,并且您想使用此database包。

您必须做的是:

  • go.mod您的main模块必须将database软件包列为“要求”。为您的database包裹指定一个临时的VCS名称:

    require (
    example.com/me/database v0.0.0
    

    )

  • 您必须告诉go工具此软件包的位置,因为我们使用的完整软件包名称只是一个临时名称/幻想名称。使用replace指令使该database程序包指向本地磁盘上的文件夹。您可以使用绝对路径和相对路径:

    replace example.com/me/database => ../database
    

就这样。

工作实例

让我们看一个可行的例子。让我们创建一个pretty模块。创建一个pretty包含2个文件的文件夹:

pretty.go:

package pretty

import "fmt"

func Pretty(v ...interface{}) {
    fmt.Println(v...)
}

go.mod (可以通过运行来创建go mod init pretty):

module pretty

现在让我们创建另一个主模块。让我们在文件夹osinf旁边创建一个文件夹(可能是任何pretty文件夹)。其中2个文件:

osinf.go (注意,我们打算使用我们的pretty包/模块,我们通过导入"example.com/me/pretty"):

package main

import "example.com/me/pretty"

func main() {
    pretty.Pretty("hi")
    pretty.Pretty([]int{1, 3, 5})
}

go.mod:

module main

require example.com/me/pretty v0.0.0

replace example.com/me/pretty => ../pretty

就这样。

go run osinf.goosinf文件夹中运行,输出为:

hi
[1 3 5]


 类似资料:
  • 问题内容: 假设我有一个名为的软件包,其中包含: 和: 然后我执行以下脚本: 这是我的期望: 这是我得到的: 谁能解释我的误解? 问题答案: 您正在使用。在导入模块的全局范围(或​​发生import语句的任何范围)中成为符号。 当您为指定新值时,您也只是在更改哪些值点,而不是实际值。尝试直接使用in导入,并通过设置在那里进行实验。这样,您实际上将在此上下文中修改哪个是“实际”值。 它有点令人费解,

  • 问题内容: 我试图使用Dagger在正在构建的应用程序上进行依赖注入,当我拥有一个程序包的模块(取决于注入器(可能是另一个模块)提供的值)时,在构造适当的DAG时遇到了麻烦。 如果我有一个用于配置变量的简单模块(例如,我可能想换成测试环境) 而另一个模块依赖于它,例如 我尝试在构造函数中引导注入的行失败,并且它抱怨我没有在适当的模块中指定显式行。 通过反复试验,我发现如果在行中添加,这种情况就消失

  • 问题内容: 在我的angularJS应用程序中,我有两个模块:模块A和模块B。 如何在模块B中调用该函数? 问题答案: 您需要在 模块A中 定义一个工厂: 然后使用 模块B中* 的工厂: *

  • 问题内容: 我已经定义了一个模块,并使用ng- app指令将其设置为我的应用程序的主要模块。我使用angular.module(’myApp’)。controller()向主应用程序添加了两个控制器。这些控制器中的一个具有页面范围的范围,而另一个控制器是子控制器。 我现在想做的是包含一个控制器,该控制器属于另一个模块(不是主要的myApp模块),但我无法弄清楚。我不想全局命名空间控制器。 有人知道

  • 我使用架构和堆栈。 对于服务之间的通信,我决定使用。 我有一个名为的服务,今天我实现了一个项目,并将其添加到存储库中。 我添加了到服务使用使用以下命令: 现在我想在中创建一个服务类,