go - 如何在另一个模块中使用“GOPATH”之外的模块?
问题描述
我使用此命令“go mod init database”在“database”文件夹中的“GOPATH”之外创建了一个库作为供个人使用的模块,但我不知道:
- 如何在另一个模块中使用/导入这个模块?
操作系统:Windows 7,转到:v1.11
解决方案
最简单且开箱即用的解决方案是将您的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]
推荐阅读
- javascript - 在 gulp 捆绑和 uglify 之后在 IIFE 中未定义上下文
- xamarin.forms - Visual Studio 2019 和 iOS:本机链接失败
- cmake - 如何使用 cmake 定位 jupyter notebook 安装
- swift - 在 MacOS 中模拟媒体键按下
- android - ActionBar 与 TextView 重叠,ConstraintLayout 问题
- javascript - 如何允许同一个 socket.io 房间的人访问同一个 redux 商店?
- matlab - 如何在 Matlab 中同时绘制椭圆和抛物线?
- unix - 如何在特定字符串后插入换行符?
- mapreduce - CouchDB 意外的减少/减少行为
- api - 如何查询大于小于的 API