使用go module导入本地包的方法教程详解

时间:2021-05-22

go module 是Go1.11版本之后官方推出的版本管理工具,并且从Go1.13 版本开始,go module 将是Go语言默认的依赖管理工具。到今天Go1.14 版本推出之后Go modules 功能已经被正式推荐在生产环境下使用了。

这几天已经有很多教程讲解如何使用go module ,以及如何使用go module 导入gitlab私有仓库,我这里就不再啰嗦了。但是最近我发现很多小伙伴在群里问如何使用go module 导入本地包,作为初学者大家刚开始接触package的时候肯定都是先在本地创建一个包,然后本地调用一下,然后就被卡住了。。。

这里就详细介绍下如何使用go module 导入本地包。

前提

假设我们现在有moduledemo 和mypackage 两个包,其中moduledemo 包中会导入mypackage 包并使用它的New 方法。

mypackage/mypackage.go 内容如下:

package mypackageimport "fmt"func New(){ fmt.Println("mypackage.New")}

我们现在分两种情况讨论:

在同一个项目下

注意:在一个项目(project)下我们是可以定义多个包(package)的。

目录结构

现在的情况是,我们在moduledemo/main.go 中调用了mypackage 这个包。

moduledemo├── go.mod├── main.go└── mypackage └── mypackage.go

导入包

这个时候,我们需要在moduledemo/go.mod 中按如下定义:

module moduledemo

go 1.14

然后在moduledemo/main.go 中按如下方式导入mypackage

package mainimport ( "fmt" "moduledemo/mypackage" // 导入同一项目下的mypackage包)func main() { mypackage.New() fmt.Println("main")}

举个例子

举一反三,假设我们现在有文件目录结构如下:

└── bubble
├── dao
│ └── mysql.go
├── go.mod
└── main.go

其中bubble/go.mod 内容如下:

module github.com/q1mi/bubblego 1.14

bubble/dao/mysql.go 内容如下:

package daoimport "fmt"func New(){ fmt.Println("mypackage.New")}

bubble/main.go 内容如下:

package mainimport ( "fmt" "github.com/q1mi/bubble/dao")func main() { dao.New() fmt.Println("main")}

不在同一个项目下

目录结构

├── moduledemo
│ ├── go.mod
│ └── main.go
└── mypackage
├── go.mod
└── mypackage.go

导入包

这个时候,mypackage 也需要进行module初始化,即拥有一个属于自己的go.mod 文件,内容如下:

module mypackage

go 1.14

然后我们在moduledemo/main.go 中按如下方式导入:

import ( "fmt" "mypackage")func main() { mypackage.New() fmt.Println("main")}

因为这两个包不在同一个项目路径下,你想要导入本地包,并且这些包也没有发布到远程的github或其他代码仓库地址。这个时候我们就需要在go.mod 文件中使用replace 指令。

在调用方也就是packagedemo/go.mod 中按如下方式指定使用相对路径来寻找mypackage 这个包。

module moduledemogo 1.14require "mypackage" v0.0.0replace "mypackage" => "../mypackage"

举个例子

最后我们再举个例子巩固下上面的内容。

我们现在有文件目录结构如下:

├── p1
│ ├── go.mod
│ └── main.go
└── p2
├── go.mod
└── p2.go

p1/main.go 中想要导入p2.go 中定义的函数。

p2/go.mod 内容如下:

module liwenzhou.com/q1mi/p2

go 1.14

p1/main.go 中按如下方式导入

import ( "fmt" "liwenzhou.com/q1mi/p2")func main() { p2.New() fmt.Println("main")}

因为我并没有把liwenzhou.com/q1mi/p2 这个包上传到liwenzhou.com 这个网站,我们只是想导入本地的包,这个时候就需要用到replace 这个指令了。

p1/go.mod 内容如下:

module github.com/q1mi/p1
go 1.14
require "liwenzhou.com/q1mi/p2" v0.0.0
replace "liwenzhou.com/q1mi/p2" => "../p2"

此时,我们就可以正常编译p1 这个项目了。

说再多也没用,自己动手试试吧。

总结

到此这篇关于使用go module导入本地包的方法教程详解的文章就介绍到这了,更多相关go module 导入本地包内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章