一尘不染

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

go

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

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

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


阅读 481

收藏
2020-07-02

共1个答案

一尘不染

最简单,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]
2020-07-02