使用go module导入本地包的方法教程详解
gomodule是Go1.11版本之后官方推出的版本管理工具,并且从 Go1.13版本开始, gomodule将是Go语言默认的依赖管理工具。到今天 Go1.14版本推出之后 Gomodules功能已经被正式推荐在生产环境下使用了。
这几天已经有很多教程讲解如何使用 gomodule,以及如何使用 gomodule导入gitlab私有仓库,我这里就不再啰嗦了。但是最近我发现很多小伙伴在群里问如何使用 gomodule导入本地包,作为初学者大家刚开始接触package的时候肯定都是先在本地创建一个包,然后本地调用一下,然后就被卡住了。。。
这里就详细介绍下如何使用 gomodule导入本地包。
前提
假设我们现在有 moduledemo和 mypackage两个包,其中 moduledemo包中会导入 mypackage包并使用它的 New方法。
mypackage/mypackage.go内容如下:
packagemypackage import"fmt" funcNew(){ fmt.Println("mypackage.New") }
我们现在分两种情况讨论:
在同一个项目下
注意:在一个项目(project)下我们是可以定义多个包(package)的。
目录结构
现在的情况是,我们在 moduledemo/main.go中调用了 mypackage这个包。
moduledemo ├──go.mod ├──main.go └──mypackage └──mypackage.go
导入包
这个时候,我们需要在 moduledemo/go.mod中按如下定义:
modulemoduledemo
go1.14
然后在 moduledemo/main.go中按如下方式导入 mypackage
packagemain import( "fmt" "moduledemo/mypackage"//导入同一项目下的mypackage包 ) funcmain(){ mypackage.New() fmt.Println("main") }
举个例子
举一反三,假设我们现在有文件目录结构如下:
└──bubble
├──dao
│ └──mysql.go
├──go.mod
└──main.go
其中 bubble/go.mod内容如下:
modulegithub.com/q1mi/bubble go1.14
bubble/dao/mysql.go内容如下:
packagedao import"fmt" funcNew(){ fmt.Println("mypackage.New") }
bubble/main.go内容如下:
packagemain import( "fmt" "github.com/q1mi/bubble/dao" ) funcmain(){ dao.New() fmt.Println("main") }
不在同一个项目下
目录结构
├──moduledemo
│ ├──go.mod
│ └──main.go
└──mypackage
├──go.mod
└──mypackage.go
导入包
这个时候, mypackage也需要进行module初始化,即拥有一个属于自己的 go.mod文件,内容如下:
modulemypackage
go1.14
然后我们在 moduledemo/main.go中按如下方式导入:
import( "fmt" "mypackage" ) funcmain(){ mypackage.New() fmt.Println("main") }
因为这两个包不在同一个项目路径下,你想要导入本地包,并且这些包也没有发布到远程的github或其他代码仓库地址。这个时候我们就需要在 go.mod文件中使用 replace指令。
在调用方也就是 packagedemo/go.mod中按如下方式指定使用相对路径来寻找 mypackage这个包。
modulemoduledemo go1.14 require"mypackage"v0.0.0 replace"mypackage"=>"../mypackage"
举个例子
最后我们再举个例子巩固下上面的内容。
我们现在有文件目录结构如下:
├──p1
│ ├──go.mod
│ └──main.go
└──p2
├──go.mod
└──p2.go
p1/main.go中想要导入 p2.go中定义的函数。
p2/go.mod内容如下:
moduleliwenzhou.com/q1mi/p2
go1.14
p1/main.go中按如下方式导入
import( "fmt" "liwenzhou.com/q1mi/p2" ) funcmain(){ p2.New() fmt.Println("main") }
因为我并没有把 liwenzhou.com/q1mi/p2这个包上传到 liwenzhou.com这个网站,我们只是想导入本地的包,这个时候就需要用到 replace这个指令了。
p1/go.mod内容如下:
modulegithub.com/q1mi/p1
go1.14
require"liwenzhou.com/q1mi/p2"v0.0.0
replace"liwenzhou.com/q1mi/p2"=>"../p2"
此时,我们就可以正常编译 p1这个项目了。
说再多也没用,自己动手试试吧。
总结
到此这篇关于使用gomodule导入本地包的方法教程详解的文章就介绍到这了,更多相关gomodule导入本地包内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。