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

sam*_*adi 19 go go-modules

我使用此命令"go mod init database"在"database"文件夹中的"GOPATH"之外创建了一个库作为个人使用的模块,我不知道:

  • 如何在另一个模块中使用/ 导入此模块?

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

icz*_*cza 41

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

import "github.com/someone/database"
Run Code Online (Sandbox Code Playgroud)

如果你这样做,你甚至不必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
    )
    
    Run Code Online (Sandbox Code Playgroud)
  • 您必须告诉go工具该软件包所在的位置,因为我们使用的完整软件包名称只是一个临时/幻想名称.使用该replace指令使此database包指向本地磁盘上的文件夹; 你可以使用绝对和相对路径:

    replace example.com/me/database => ../database
    
    Run Code Online (Sandbox Code Playgroud)

就这样.

工作实例

让我们看一个有效的例子.我们来创建一个pretty模块.创建一个pretty包含2个文件的文件夹:

pretty.go:

package pretty

import "fmt"

func Pretty(v ...interface{}) {
    fmt.Println(v...)
}
Run Code Online (Sandbox Code Playgroud)

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

module pretty
Run Code Online (Sandbox Code Playgroud)

现在让我们创建另一个主模块.让我们在文件夹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})
}
Run Code Online (Sandbox Code Playgroud)

go.mod:

module main

require example.com/me/pretty v0.0.0

replace example.com/me/pretty => ../pretty
Run Code Online (Sandbox Code Playgroud)

就这样.

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

hi
[1 3 5]
Run Code Online (Sandbox Code Playgroud)