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这种标准名字,是不是很有意思。

Golang使用go mod 导入本地库相关推荐

  1. go mod导入本地包

    利用go mod导入本地包 在实际项目开发过程中,为了完成一些功能,往往需要自己在本地新建一些包,然后在项目的其他go文件中调用该包.当使用go mod管理 包时,会出现一些错误,比如:如果我们本地的 ...

  2. golang之go mod自动下载私有仓库gitlab中的包

    我的环境: golang:  v1.13.5 系统:window10, window7, linux(centos) 环境变量:GOPROXY=https://proxy.cn,direct 假如我在 ...

  3. 如何解决Golang项目采用go mod时出现i/o timeout的问题

    上一篇文章介绍了go mod的作用及演示了一个小例子,如果需要理解基础知识,请访问我上篇文章. 在项目开发过程中,采用了go mod后,会在项目下生成一个go.mod文件,如下: 该文件中会定义对go ...

  4. golang中go mod使用第三方包

    go mod init #在代码中引入第三方包之后执行下面的命令 go mod download go run xxx.go

  5. 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 ...

  6. Golang使用go.mod配置加载本地模块

    Go现在通过 go.mod 文件来配置模块加载使用是非常方便了,下面说下如何在当前项目中加载另一个本地正在开发的模块: go.mod module github.com/zhouzme/test-go ...

  7. 【报错解决-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 ...

  8. go mod导入本地包的正确引入方法:require + replace

    GO111MODULE=auto时,如果是写在GOPATH/src目录下的包,可以直接引入,不含src

  9. Golang 必知必会Go Mod命令

    Golang 必知必会Go Mod命令 Golang轻松学习 文章目录 Golang 必知必会Go Mod命令 一.go mod 是什么? 二.详细命令 1. init 2.download 3.ti ...

最新文章

  1. 又一数据挖掘赛事,在校生专属,翼支付杯来了(直通实习机会)
  2. 如何只在IE上加载CSS样式表
  3. iOS:自己写的一个星级评价的小Demo
  4. 软件工程python就业方向-软件工程实践总结
  5. [Golang学习笔记] 05 程序实体2 作用域访问权限和变量重声明
  6. Android实现富文本时遇到的一些问题(2)字体效果的保存
  7. Linux内核链表 内存屏障,为什么需要内存屏障
  8. [系统安全] 九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御
  9. 静态资源Html基础语法
  10. vue 地图使用navigator_weex踩坑之旅第五弹 ~ 使用navigator内置模块实现导航
  11. 【抄】更改eclipse配置
  12. 做高频通用还是低频专业
  13. 计算机操作系统第四版课后题答案汤小丹
  14. 考研高数笔记(数一)--pdf文档 百度网盘自取
  15. 《超越宝典汽配汽修管理系统——“美容管理”模块》项目研发阶段性总结
  16. ubuntu_使用ros显示imu的状态(6)
  17. ADXRS620/642/646发布:在PX4上我们为什么扔掉了MPU6000这个IMU
  18. html多个span平均分布各行,往div里面加100个span 每10个换行 换行怎么换啊
  19. go如何实现图片拼接,文字书写
  20. win7电脑变身WiFi热点,让手机、笔记本共享上网

热门文章

  1. 西瓜书习题4.3(基于信息熵的决策树)
  2. Python学习笔记之schedule 定时任务
  3. Jmeter详细使用教程,Jmeter压测,并发测试
  4. 谷歌JAX快速入门笔记详解和案例
  5. 2022 最新一次 Java 面试,快手三面一轮游,如今已拿意向书
  6. Struts2 入门教程 HelloWorld示例
  7. html怎么设置荧光边框,前端|网页制作秘密武器 之发光边框
  8. 如何让计算机和服务器时间同步,如何设置电脑及服务器时间与授时服务器时间同步(耿娟平供稿)...
  9. 牛客网机器学习笔记(1)
  10. 李嘉诚:五十年不败秘诀九○%时间先想失败