38

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

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

操作系统:Windows 7,转到:v1.11

4

2 回答 2

78

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

import "github.com/someone/database"

如果你这样做了,你甚至不必go.mod手动修改文件,一切都将由 go 工具处理:它会自动识别并解决这个依赖关系,下载并安装所需的包,还会go.mod自动更新.

完全留在本地磁盘上

如果您不想使用 VCS(例如,您只是在试验,或者您还没有决定使用什么),那么您仍然可以这样做。官方 Go Wiki 中有详细说明:可以在本地文件系统上完全在 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 个文件的文件夹:

漂亮的去:

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})
}

去.mod:

module main

require example.com/me/pretty v0.0.0

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

就这样。

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

hi
[1 3 5]
于 2018-09-14T10:36:28.380 回答
1

跑:

go mod init yellow

然后创建一个文件yellow.go

package yellow

func Mix(s string) string {
   return s + "Yellow"
}

然后创建一个文件orange/orange.go

package main
import "yellow"

func main() {
   s := yellow.Mix("Red")
   println(s)
}

然后构建:

go build

https://golang.org/doc/code.html

于 2020-12-18T03:48:38.270 回答