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

标签 go go-modules

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

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

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

最佳答案

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

import "github.com/someone/database"

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

完全保留在本地磁盘上

如果您不想使用 VCS(例如,您只是在试验或尚未决定使用什么),那么您仍然可以这样做。 如何在官方 Go Wiki: Can I work entirely outside of VCS on my local filesystem? 中有详细说明

所以你创建了一个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]

关于go - 如何在另一个模块中使用 "GOPATH"之外的模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52436091/

相关文章:

docker - Go-使用CompileDaemon进行Docker自动重载

go - 将 slice 传递给函数

go - 错误: "build flag -mod=vendor only valid when using modules" when building Go project

go get -u github.com/onsi/ginkgo/ginkgo 突然开始抛出错误

Go模块: main. go文件在go构建后被覆盖

go - 如何使用带有版本化 Go 模块的 fork 模块(v1.11+,GO111MODULE=on)

parsing - 使用 Go 解析 Go 时间戳

pointers - 如何取消引用作为空接口(interface)传递的指针值?

Goland 无法使用 Go 1.14 识别我的 vendor 目录

pointers - 通过将指针传递给 Go 中的函数来获取不同的值