18910140161

如何使用go module导入本地包

顺晟科技

2021-06-16 10:27:07

361

Go模块是Go1.11之后推出的官方版本管理工具,从Go1.13开始,Go模块将成为Go语言默认的依赖管理工具。自今天Go1.14发布以来,Go模块功能已被正式推荐用于生产环境。

这几天已经有很多关于如何使用go模块和如何使用go模块导入gitlab私有仓库的教程了,这里就不赘述了。不过最近发现群里很多朋友问怎么用go模块导入本地包?作为初学者,刚接触包的时候,首先要在本地创建一个包,然后在本地调用,然后卡住。

在这里,我们将详细介绍如何使用go模块导入本地包。

先决条件

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

mypackage/mypackage.go的内容如下:

打包mypackage

导入“fmt”

func New(){

fmt。Println('mypackage。新')

}

我们现在讨论两种情况:

在同一项目下

注意:我们可以在一个项目下定义多个包。

目录结构

目前我们在moduledemo/main.go中调用mypackage.

moduledemo

go.mod

去大街

我的包裹

我的包裹,去吧

导入包

此时,我们需要在moduledemo/go.mod中对其进行如下定义:

模块moduledemo

go 1.14

然后在moduledemo/main中导入mypackage

包装总管

导入(

“fmt”

module demo/mypackage//在同一项目下导入my package包

)

func main() {

我的包裹。新()

fmt。Println('main ')

}

例如

以此类推,假设我们现在有如下的文件目录结构:

泡沫

mysql.go

go.mod

去大街

bubble/go.mod的内容如下:

github.com/q1mi/bubble模块

go 1.14

Bubble/dao/mysql.go如下:

打包刀

导入“fmt”

func New(){

fmt。Println('mypackage。新')

}

Bubble/main.go如下:

包装总管

导入(

“fmt”

github.com/q1mi/bubble/dao '

)

func main() {

道。新()

fmt。Println('main ')

}

不在同一个项目下

目录结构

莫代德莫

go.mod

main.go

我的包裹

go.mod

我的包裹,去吧

导入包

这时mypackage也需要模块初始化,也就是有自己的go.mod文件,如下:

模块mypackage

go 1.14

然后我们在moduledemo/main中导入它。

导入(

“fmt”

“mypackage”

)

func main() {

我的包裹。新()

fmt。Println('main ')

}

因为这两个包不在同一个项目路径下,所以您希望导入本地包,并且这些包不会发布到远程github或其他代码仓库地址。此时,我们需要在go.mod文件中使用replace命令。

在调用者,即moduledemo/go.mod中,指定使用相对路径来查找mypackage,如下所示。

模块moduledemo

go 1.14

需要“my package”v 0 . 0 . 0

替换“my package”=”./mypackage '

例如

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

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

p1

go.mod

main.go

p2

go.mod

p2.go

P1/main.go想导入p2.go中定义的函数.

P2/go.mod内容如下:

liwenzhou.com/q1mi/p2模块

go 1.14

P1/main.go导入如下

导入(

“fmt”

liwenzhou.com/q1mi/p2 '

)

func main() {

p2。新()

fmt。Println('main ')

}

因为我没有把liwenzhou.com/q1mi/p2的包上传到liwenzhou.com的网站上,我们只想导入本地包,所以此时需要使用replace命令。

P1/go.mod内容如下:

github.com/q1mi/p1模块

go 1.14

需要' liwenzhou.com/q1mi/p2' v0.0.0

替换为' liwenzhou.com/q1mi/p2'='./p2 '

此时,我们可以正常编译p1项目。

多说无益。自己试试。

相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航