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
- 调用当前项目下的其他包,用module名+相对路径即可。
- 调用非当前项目的其他本地包,需要修改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这种标准名字,是不是很有意思。
Golang使用go mod 导入本地库相关推荐
- go mod导入本地包
利用go mod导入本地包 在实际项目开发过程中,为了完成一些功能,往往需要自己在本地新建一些包,然后在项目的其他go文件中调用该包.当使用go mod管理 包时,会出现一些错误,比如:如果我们本地的 ...
- golang之go mod自动下载私有仓库gitlab中的包
我的环境: golang: v1.13.5 系统:window10, window7, linux(centos) 环境变量:GOPROXY=https://proxy.cn,direct 假如我在 ...
- 如何解决Golang项目采用go mod时出现i/o timeout的问题
上一篇文章介绍了go mod的作用及演示了一个小例子,如果需要理解基础知识,请访问我上篇文章. 在项目开发过程中,采用了go mod后,会在项目下生成一个go.mod文件,如下: 该文件中会定义对go ...
- golang中go mod使用第三方包
go mod init #在代码中引入第三方包之后执行下面的命令 go mod download go run xxx.go
- golang go/pkg/mod/github.com/agiledragon/gomonkey@v2.0.2+incompatible/patch.go:163:10: undefined: bu
macos pro m1 设备 goland 运行test 提示: go/pkg/mod/github.com/agiledragon/gomonkey@v2.0.2+incompatible/pat ...
- Golang使用go.mod配置加载本地模块
Go现在通过 go.mod 文件来配置模块加载使用是非常方便了,下面说下如何在当前项目中加载另一个本地正在开发的模块: go.mod module github.com/zhouzme/test-go ...
- 【报错解决-Golang】go mod 安装第三方包提示:module declares its path as: ××× but was required as: ×××
go mod 安装第三方包提示:module declares its path as: ××× but was required as: ××× 解决办法 今天使用 go mod tidy 和 go ...
- go mod导入本地包的正确引入方法:require + replace
GO111MODULE=auto时,如果是写在GOPATH/src目录下的包,可以直接引入,不含src
- Golang 必知必会Go Mod命令
Golang 必知必会Go Mod命令 Golang轻松学习 文章目录 Golang 必知必会Go Mod命令 一.go mod 是什么? 二.详细命令 1. init 2.download 3.ti ...
最新文章
- 又一数据挖掘赛事,在校生专属,翼支付杯来了(直通实习机会)
- 如何只在IE上加载CSS样式表
- iOS:自己写的一个星级评价的小Demo
- 软件工程python就业方向-软件工程实践总结
- [Golang学习笔记] 05 程序实体2 作用域访问权限和变量重声明
- Android实现富文本时遇到的一些问题(2)字体效果的保存
- Linux内核链表 内存屏障,为什么需要内存屏障
- [系统安全] 九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御
- 静态资源Html基础语法
- vue 地图使用navigator_weex踩坑之旅第五弹 ~ 使用navigator内置模块实现导航
- 【抄】更改eclipse配置
- 做高频通用还是低频专业
- 计算机操作系统第四版课后题答案汤小丹
- 考研高数笔记(数一)--pdf文档 百度网盘自取
- 《超越宝典汽配汽修管理系统——“美容管理”模块》项目研发阶段性总结
- ubuntu_使用ros显示imu的状态(6)
- ADXRS620/642/646发布:在PX4上我们为什么扔掉了MPU6000这个IMU
- html多个span平均分布各行,往div里面加100个span 每10个换行 换行怎么换啊
- go如何实现图片拼接,文字书写
- win7电脑变身WiFi热点,让手机、笔记本共享上网
热门文章
- 西瓜书习题4.3(基于信息熵的决策树)
- Python学习笔记之schedule 定时任务
- Jmeter详细使用教程,Jmeter压测,并发测试
- 谷歌JAX快速入门笔记详解和案例
- 2022 最新一次 Java 面试,快手三面一轮游,如今已拿意向书
- Struts2 入门教程 HelloWorld示例
- html怎么设置荧光边框,前端|网页制作秘密武器 之发光边框
- 如何让计算机和服务器时间同步,如何设置电脑及服务器时间与授时服务器时间同步(耿娟平供稿)...
- 牛客网机器学习笔记(1)
- 李嘉诚:五十年不败秘诀九○%时间先想失败