go module 是Go1.11版本之后官方推出的版本管理工具,并且从 Go1.13 版本开始, go module 将是Go语言默认的依赖管理工具。到今天 Go1.14 版本推出之后 Go modules 功能已经被正式推荐在生产环境下使用了。

这几天已经有很多教程讲解如何使用 go module ,以及如何使用 go module 导入gitlab私有仓库,我这里就不再啰嗦了。但是最近我发现很多小伙伴在群里问如何使用 go module 导入本地包,作为初学者大家刚开始接触package的时候肯定都是先在本地创建一个包,然后本地调用一下,然后就被卡住了。。。

这里就详细介绍下如何使用 go module 导入本地包。

前提

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

mypackage/mypackage.go 内容如下:

?

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

在同一个项目下

注意:在一个项目(project)下我们是可以定义多个包(package)的。

目录结构

现在的情况是,我们在 moduledemo/main.go 中调用了 mypackage 这个包。

?

导入包

这个时候,我们需要在 moduledemo/go.mod 中按如下定义:

module moduledemo

go 1.14

然后在 moduledemo/main.go 中按如下方式导入 mypackage

?

举个例子

举一反三,假设我们现在有文件目录结构如下:

└── bubble

├── dao

│   └── mysql.go

├── go.mod

└── main.go

其中 bubble/go.mod 内容如下:

?

bubble/dao/mysql.go 内容如下:

?

bubble/main.go 内容如下:

?

不在同一个项目下

目录结构

├── moduledemo

│   ├── go.mod

│   └── main.go

└── mypackage

├── go.mod

└── mypackage.go

导入包

这个时候, mypackage 也需要进行module初始化,即拥有一个属于自己的 go.mod 文件,内容如下:

module mypackage

go 1.14

然后我们在 moduledemo/main.go 中按如下方式导入:

?

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

在调用方也就是 packagedemo/go.mod 中按如下方式指定使用相对路径来寻找 mypackage 这个包。

?

举个例子

最后我们再举个例子巩固下上面的内容。

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

├── p1

│   ├── go.mod

│   └── main.go

└── p2

├── go.mod

└── p2.go

p1/main.go 中想要导入 p2.go 中定义的函数。

p2/go.mod 内容如下:

module liwenzhou.com/q1mi/p2

go 1.14

p1/main.go 中按如下方式导入

?

因为我并没有把 liwenzhou.com/q1mi/p2 这个包上传到 liwenzhou.com 这个网站,我们只是想导入本地的包,这个时候就需要用到 replace 这个指令了。

p1/go.mod 内容如下:

module github.com/q1mi/p1

go 1.14

require "liwenzhou.com/q1mi/p2" v0.0.0

replace "liwenzhou.com/q1mi/p2" => "../p2"

此时,我们就可以正常编译 p1 这个项目了。

说再多也没用,自己动手试试吧。

总结

到此这篇关于使用go module导入本地包的方法教程详解的文章就介绍到这了,更多相关go module 导入本地包内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.liwenzhou.com/posts/Go/import_local_package_in_go_module/

golang导入git包_使用go module导入本地包的方法教程详解相关推荐

  1. go语言导入git包_使用go module导入本地包的方法教程详解

    go module 是Go1.11版本之后官方推出的版本管理工具,并且从 Go1.13 版本开始, go module 将是Go语言默认的依赖管理工具.到今天 Go1.14 版本推出之后 Go mod ...

  2. 广域网访问局域网路由器设置_交换机路由器如何连接 交换机路由器连接方法【详解】...

    交换机是网络中最常见的网络设备,企业或家庭用户对交换机都不陌生.对企业的网络管理员来说,不论高端还是低端,交换机绝对是网络中非常重要的设备,并且数量较多,搞清楚交换机之间的连接更有助于工作的开展. 第 ...

  3. 用了python之后笔记本卡了怎么办_造成笔记本电脑卡原因 笔记本电脑卡解决方法【详解】...

    在工作和生活中使用笔记本的时候,大家有没有遇到笔记本电脑非常的卡, 造成 笔记本电脑 卡原因 是什么呢?很多用户不知道是什么原因造成的,有技术人员告诉我们,有可能是因为网络自身问题.系统资源不足.网线 ...

  4. 关闭笔记本显示器指定组合键才能打开_笔记本外接显示器怎么设置 笔记本外接显示器设置方法【详解】...

    相对来说笔记本显示器要比台式机的屏幕要小上很大一截,用习惯了台式机子,再看笔记本电脑屏幕真有些不习惯,特别是爱玩游戏的童鞋们.那么,你知道用笔记本可以外接显示器吗?今天小编就带大家一起来了解下笔记本外 ...

  5. 串口打印怎么使用】_爱普生打印机怎么使用 爱普生打印机使用方法【详解】...

    市面上的打印机品牌有很多,其中就有爱普生打印机,这个品牌的打印机是在上个世纪的四十年代成立的,并且爱普生这款打印机逐渐深入我们的生活,一般我们很多都会使用爱普生打印机来打印资料或者是下载各种工作材料, ...

  6. 灯泡亮度控制单片机_如何有效保护投影机灯泡 保护投影机灯泡方法【详解】...

    如何有效保护投影机灯泡? 投影灯泡是投影机中的一种重要耗材,价格比较昂贵,如何有效保护灯泡是每一位用户都必须认真对待的问题.为此,我们将提出以下六点则建议,希望能为广大的投影机用户提供帮助,有效保护好 ...

  7. 低压抽屉柜常见故障处理方法_传真机常见故障如何处理 传真机常见故障处理方法【详解】...

    如今传真机的功能是越来越全面了,内部构造也越来越复杂.因此人们在日常使用传真机过程中难免会出现各种各样的问题.那么传真机常见故障有哪些?有哪些相应的解决或排除方法呢?下面随着小编一起来了解下吧! 一. ...

  8. Java控制手机在同一网下_安卓手机控制另一手机的方法【详解】

    在日常生活中,有时候由于一些特殊的原因,可能就会需要用到远程遥控的功能.一般电脑上都可以借助qq等等平台实现这个板块的需求,但是如果应用到手机上,用户就会面临一个不小的麻烦.那么今天为大家介绍的就是关 ...

  9. 手机cpu缓冲区大小怎么设置_手机怎么设置dns 手机设置dns方法【详解】

    很多时候,你去一个地方或者自己 的网络DNS解析的速度会直接影响你的网速 ,不信你打开一个网页,然后看浏览器的左下角的状态,经常会卡在解析--而且,大多数自用的带有路由的网络都默认的是自动获得DNS地 ...

最新文章

  1. javascript-arguments不确定参数使用
  2. [探讨]一次性工具软件
  3. 随笔--2011.12.21
  4. 【Android 插件化】基于插件化的恶意软件的加载策略分析 ( 自定义路径加载插件 | 系统路径加载插件 | 用户同意后加载插件 | 隐藏恶意插件 )
  5. 白话Elasticsearch45-深入聚合数据分析之易并行聚合算法,三角选择原则,近似聚合算法
  6. 区块链BaaS云服务(15)复杂美chain33
  7. Python学习笔记-day1(while流程控制)
  8. FTP下载文件中文名乱码FTP访问
  9. 罗永浩谈乔纳森离职:乔布斯才是苹果的灵魂设计师
  10. 使用Maven命令安装jar包到repo中
  11. https防止注入_【缺陷周话】第40期:JSON 注入
  12. iPhone 的续航有望加长!749 元的“磁吸充电宝”你会买吗?
  13. 黄聪:一个拼图工具的制作思路
  14. c语言如何找一个数的ac码,详细解析C语言中的开方实现
  15. c++ 可变参数_深入剖析ProE可变扫描特征原理、操作和应用方法
  16. Linux基础—1.Linux系统(CentOS6.7)详细安装过程
  17. sap未分摊差异怎么处理_聊一聊,临时外包员工差异化薪酬要怎么处理
  18. 通信信号调制方式识别——综述/硕博
  19. 让CentOS支持ext4文件系统
  20. dell r230u盘启动安装2008_利用U盘安装win2008r2系统的步骤

热门文章

  1. Micropython实例之TPYBoardv102开发板DIY照相机
  2. 多线程学习-基础(十三)(学习参考·网摘) ArrayBlockingQueue源代碼解析(base jdk 1.8)...
  3. 一种简单的数据库性能测试方法
  4. Object-C与Swift混合开发
  5. 【Unity/Kinect】获取预制的手势信息KinectInterop.HandState
  6. [20160910]低级错误.txt
  7. FastReport.Net 入门
  8. C#命名规范 C#控件的缩写大全
  9. .Net Discovery 系列之四--深入理解.Net垃圾收集机制(下)
  10. 微信小程序 - this.triggerEvent()