栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

Golang使用go mod 导入本地库

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Golang使用go mod 导入本地库

Golang使用go mod 导入本地库(结合goland编译器)

主要分为两种情况:一种是在同一个项目下导入,一种是两个不同项目

我的gopath路径在D:gowork


同一个项目导入

这种情况是不需要改动go.mod文件的

文件结构如下,firsttest目录下一个main.go文件,外加当前文件夹下面的InvokeDir文件夹,文件下面有个invoke.go文件,作为测试用的调用函数


1.go.mod文件,注意module名字为firsttest,这个名字就是module名字

main.go文件内容,可以看到直接用module名字加相对路径文件夹即可。即firsttest/InvokeDir

InvokeDir文件内容,注意函数要大写暴露出来给main.go调用

2. 为了表现go.mod文件module名字作用,我们把它改为

这时候发现标红,无法识别

必须改成module 名字+当前文件夹的相对路径才可以

3.为了体现go mod和传统gopath的区别,我们把gomodule关闭看看。
我用的是goland,所以需要把这个Enable对勾取消,表现如下,此时就用我们传统的gopath路径。

看又标红了

而且由于我们路径选择的是D:gowork(gomod可以任意目录),而不是D:gowork/src,我们文件夹下的InvokeDir这个包根本无法调用,如果要调用怎么办呢,如下:

把文件都丢到src下面,此时就可以用传统gopath方式调用了,应该注意到这是因为新的Invoke文件夹因为在src下,才能识别到。

应该注意到,我们gomod用的调用文件夹在D:gowork/firsttest/invokeDir
而传统gopath调用文件夹在D:gowork/src/firsttest/invoke
注意加粗区别,那么我们能不能在gomod目录下非要调用AddNumber函数呢,因为这相当于涉及一个非当前项目调用的问题,只不过在传统gopath导入包模式下。(目前go module已经关闭,保持传统gopath方式)

答案就是可以,我们直接把src下这个函数的路径写下来就行,即使此时我们在D:gowork目录下

总结: 传统gopath调用包,这个包要在src下,导入路径import加上该包相对src下的路径,不涉及当前项目还是其他项目导入包的问题。 go mod呢,必须启动gomod
  1. 调用当前项目下的其他包,用module名+相对路径即可。
  2. 调用非当前项目的其他本地包,需要修改go.mod文件,包的导入路径从go.mod文件里参照。

gomod调用不同项目的本地包

打开goland的go module模式

发现我们在gomod又不行了,之前我们用传统模式是可以直接调用src下面的Invoke包的。
这里面就涉及一个非当前项目,如何调用本地包的问题,我们就拿这个例子来改动,看如何用gomod来调用。

解决步骤如下:

1. 在被调用的包下面,使用gomodule功能,把该被调用包变成一个module, go mod init firsttest

2. 在我们自己项目的go mod下增加如下配置: 解释下,require 就是我们要引用的包名,名字随便起,和import导入时对应就好(建议名字跟本地其他包的module名相同),replace是关键,用这种格式,将src的包转换成我们导入的包名。=>这里我填的是绝对路径,也可以用相对路径。

3. 我们再看看是不是正常了,这就实现了传统gopath的导入,但我们此时还是gomod模式,好处就是我们可以不拘泥于src下创建项目,非常适合linux环境的开发。

ps:这里说个好玩的地方,我们在replace=>后面填上了本地包的绝对路径后,前面的require报名我们可以随便取名。

比如

改为

把导入名字也改成hello,居然也可以!
此时的hello可以看作一个变量,变量就是你自己随便取的名字,只要replace =>后面指向的绝对路径是我们想要导入的包就可以啦,所以你就可以把包名改成github.com这种标准名字,是不是很有意思。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/944953.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号