如何使用“模块”之外的模块;GOPATH“;在另一个模块中?
我已经在“数据库”文件夹中的“GOPATH”之外创建了一个库作为个人使用的模块,使用这个命令“go mod init database”,我不知道:如何使用“模块”之外的模块;GOPATH“;在另一个模块中?,go,go-modules,Go,Go Modules,我已经在“数据库”文件夹中的“GOPATH”之外创建了一个库作为个人使用的模块,使用这个命令“go mod init database”,我不知道: 如何在其他模块中使用/导入此模块 OS:Windows 7,Go:v1.11最简单、最实用的现成解决方案是将您的数据库包/模块放入VCS(例如github.com),以便其他包(在其他模块内)可以通过如下方式导入来引用它: import "github.com/someone/database" 如果您这样做,您甚至不必手动摆弄go.mod文
- 如何在其他模块中使用/导入此模块
OS:Windows 7,Go:v1.11最简单、最实用的现成解决方案是将您的
数据库
包/模块放入VCS(例如github.com),以便其他包(在其他模块内)可以通过如下方式导入来引用它:
import "github.com/someone/database"
如果您这样做,您甚至不必手动摆弄go.mod
文件,一切都将由go工具处理:它将自动识别并解决此依赖关系,下载并安装所需的软件包,还将自动更新go.mod
完全保留在本地磁盘上
如果你不想使用VCS(例如,你只是在试验,或者你还没有决定使用什么),那么你仍然可以这样做。官方文件中详细说明了具体操作方法
因此,您在GOPATH
之外创建了一个数据库
文件夹,并在其中创建了一个模块。您创建了另一个模块,我们称之为main
,您希望使用这个数据库
包
你必须做的是:
模块的main
必须将go.mod
包列为“要求”。为您的数据库
包指定一个临时VCS名称:数据库
require ( example.com/me/database v0.0.0 )
- 您必须告诉go工具这个包的位置,因为我们使用的完整包名只是一个临时/幻想的名称。使用
指令使此replace
包指向本地磁盘上的文件夹;您可以使用绝对路径和相对路径:数据库
replace example.com/me/database => ../database
pretty
模块。创建一个包含2个文件的pretty
文件夹:
漂亮。开始:
package pretty
import "fmt"
func Pretty(v ...interface{}) {
fmt.Println(v...)
}
module main
require example.com/me/pretty v0.0.0
replace example.com/me/pretty => ../pretty
go.mod(可以通过运行go mod init pretty
创建):
现在,让我们创建另一个主模块。让我们在pretty
文件夹旁边创建一个文件夹osif
(它可以是任何东西)。其中包含2个文件:
osif.go(注意我们打算使用我们的pretty
包/模块,我们通过“example.com/me/pretty”
导入它):
go.mod:
package pretty
import "fmt"
func Pretty(v ...interface{}) {
fmt.Println(v...)
}
module main
require example.com/me/pretty v0.0.0
replace example.com/me/pretty => ../pretty
就这些
在osif
文件夹中运行go运行osif.go
,输出为:
hi
[1 3 5]
运行:
然后创建一个文件黄色。转到:
package yellow
func Mix(s string) string {
return s + "Yellow"
}
package main
import "yellow"
func main() {
s := yellow.Mix("Red")
println(s)
}
然后创建一个文件orange/orange.go
:
package yellow
func Mix(s string) string {
return s + "Yellow"
}
package main
import "yellow"
func main() {
s := yellow.Mix("Red")
println(s)
}
然后构建:
go build
您可以按照mod.go文件中声明的包名导入它。请注意,您不能导入模块,只能导入包。还请注意,没有“本地”包的概念。包在gopath之外,因此go构建工具无法识别它,因此无法构建模块。GO111MODULE=on(GOPTH之外的默认值)的go 1.11可以在任何地方构建。你真的必须提供更多关于你的问题的细节。你没有。把它放在你的路径上。不要与工具抗争。不,这都是错的。您不是“构建模块”,而是构建包。mod只描述了模块的版本,以及(可选)模块中某个包导入的包是否需要特定版本go build
将生成您的包,如果您的包想要导入“foo/bar”,则必须导入“foo/bar”
。如果必须使用foo/bar v3.4.5:在go.mod中添加一行。只需运行go build。Go build将下载任何依赖项(通过查看导入语句)并生成。不用了,让我参与进来,非常感谢。这正是我所需要的。@samadadi您应该将答案标记为“已接受”,以给icza评分,并增加答案的可见性。看见