• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

Recommended Posts

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

这几天已经有很多关于如何使用go模块,如何用go模块导入gitlab私仓的教程了,这里就不啰嗦了。但是最近发现群里很多朋友问怎么用go模块导入本地包。作为初学者,大家首先要在本地创建一个包,然后在本地调用,然后就卡了。

下面是如何使用go模块导入本地包的详细描述。

Go mod用法:

初始化模块go mod init项目模块名

根据go.mod文件go mod tidy处理依赖关系。

将依赖包复制到项目下的供应商目录中。如果mod厂商被封锁(围墙),可以使用这个命令,然后用go build -mod=vendor编译。

显示相关性列表-全部

显示详细的相关性列表-m -json all

没有必要编写依赖于Go Mod下载的下载[路径@版本][路径@版本]

一、前言

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

mypackage/mypackage.go的内容如下:

包装我的包装

导入' fmt '

func New(){

fmt。Println('mypackage。新’)

}

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

1.1 在同一个项目下

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

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

模块化

围棋网

大街。去

我的包裹

导入包我的包裹

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

模块模块

go 1.14

然后在moduledemo/main中导入mypackage,如下所示

主包装

导入(

' fmt '

Moduledemo/mypackage' //导入同一项目下的mypackage包

)

func main() {

我的包裹。新()

fmt。Println(“主”)

}

举个例子

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

泡沫

mysql.go

围棋网

大街。去

其中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(“主”)

}

1.2 不在同一个目录下

目录结构

模块

go.mod

主页面

我的包裹

围棋网

导入包我的包裹

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

模块mypackage

go 1.14

然后我们在moduledemo/main.go中导入它,如下所示:

导入(

' fmt '

'我的包'

)

func main() {

我的包裹。新()

fmt。Println(“主”)

}

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

在调用者,也就是moduledemo/go.mod中,相对路径指定如下,以查找mypackage。

模块模块

go 1.14

需要“我的包”版本0.0.0

替换“我的包”='./mypackage '

例如

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

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

p1

go.mod

主页面

p2

围棋网

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(“主”)

}

因为我没有把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项目了。

多说无益。你自己试试。

Link to comment
Share on other sites