golang版本管理工具GO111MODULE
在go1.11版本前,想要对go语言包进行管理,只能依赖第三方库实现,比如Vendor,
GoVendor,
GoDep,
Dep,
Glide
等等。
1. 开启GO111MODULE
用环境变量 GO111MODULE
开启或关闭模块支持,它有三个可选值:off
、on
、auto
,默认值是 auto
。
GO111MODULE=off
无模块支持,go 会从 GOPATH 和 vendor 文件夹寻找包。GO111MODULE=on
模块支持,go 会忽略 GOPATH 和 vendor 文件夹,只根据go.mod
下载依赖。GO111MODULE=auto
在$GOPATH/src
外面且根目录有go.mod
文件时,开启模块支持。
在使用模块的时候,GOPATH
是无意义的,不过它还是会把下载的依赖储存在 $GOPATH/src/mod
中,也会把 go install
的结果放在 $GOPATH/bin
中。
2. 定义module
模块根目录和其子目录的所有包构成模块,在根目录下存在 go.mod
文件,子目录会向着父目录、爷目录一直找到 go.mod
文件。
模块路径指模块根目录的导入路径,也是其他子目录导入路径的前缀。
go.mod
文件第一行定义了模块路径,该模块的子目录都相对于该地址。若go程序需要应用子模块,则直接导入go.mod中模块地址+子目录。
go.mod
文件接下来的篇幅用来定义当前模块的依赖和依赖版本,也可以排除依赖和替换依赖。
module example.com/m require (
golang.org/x/text v0.3.0
gopkg.in/yaml.v2 v2.1.0
) replace (
golang.org/x/text => github.com/golang/text v0.3.0
)
这个文件不用手写,可以用 go mod init example.com/m
生成 go.mod
的第一行,文件的剩余部分也不用担心,在执行 go build
、go test
、go list
命令时会根据需要的依赖自动生成 require
语句。
官方建议经常维护这个文件,保持依赖项是干净的。对于国内用户来说,手动维护这个文件是必然的,因为你需要把 golang.org/x/text
替换成 github.com/golang/text
。
3. 相关命令
go list 命令
go list -m
可以查看当前的依赖和版本
go mod 命令
这个子命令用来处理 go.mod
文件。
download download modules to local cache
edit edit go.mod from tools or scripts
graph print module requirement graph
init initialize new module in current directory
tidy add missing and remove unused modules
vendor make vendored copy of dependencies
verify verify dependencies have expected content
why explain why packages or modules are needed
go get 命令
获取依赖的特定版本,用来升级和降级依赖。可以自动修改 go.mod
文件,而且依赖的依赖版本号也可能会变。在 go.mod
中使用 exclude
排除的包,不能 go get
下来。
与以前不同的是,新版 go get
可以在末尾加 @
符号,用来指定版本。
它要求仓库必须用 v1.2.0
格式打 tag,像 v1.2
少个零都不行的,必须是语义化的、带 v
前缀的版本号。
go get github.com/gorilla/mux # 匹配最新的一个 tag
go get github.com/gorilla/mux@latest # 和上面一样
go get github.com/gorilla/mux@v1.6.2 # 匹配 v1.6.2
go get github.com/gorilla/mux@e3702bed2 # 匹配 v1.6.2
go get github.com/gorilla/mux@c856192 # 匹配 c85619274f5d
go get github.com/gorilla/mux@master # 匹配 master 分支
latest
匹配最新的 tag。
v1.2.6
完整版本的写法。
v1
、v1.2
匹配带这个前缀的最新版本,如果最新版是 1.2.7
,它们会匹配 1.2.7
。
c856192
版本 hash 前缀、分支名、无语义化的标签,在 go.mod
里都会会使用约定写法 v0.0.0-20180517173623-c85619274f5d
,也被称作伪版本。
go get
可以模糊匹配版本号,但 go.mod
文件只体现完整的版本号,即 v1.2.0
、v0.0.0-20180517173623-c85619274f5d
,只不过不需要手写这么长的版本号,用 go get
或上文的 go mod -require
模糊匹配即可,它会把匹配到的完整版本号写进 go.mod
文件。
go build 命令
go build -getmode=vendor
在开启模块支持的情况下,用这个可以退回到使用 vendor 的时代。
参考:
1. 用 golang 1.11 module 做项目版本管理
golang版本管理工具GO111MODULE的更多相关文章
- linux系统下使用流行的版本管理工具 Git
前几天被版本管理困扰了好久,主要是因为 没法回到之前的版本,新版本又出了问题真的很尴尬. 终于决定使用目前网上很火的版本管理工具-------Git 历史啥的就不说了,说些有用的. 我用的是oschi ...
- GIT版本管理工具
原文:http://blog.csdn.net/ithomer/article/details/7527877 Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介 ...
- Studio之版本管理工具Git (图文教程)
目前业界主流的版本管理工具主要是 svn/git.svn是1种集中式的代码管理工具,而git是1种散布式的代码管理工具,广受极客的爱好.而基于git的github更是全宇宙码农的提高逼格,深究技术的必 ...
- 版本管理工具介绍—Git篇
前篇 如题,提起版本管理工具相信做C#开发 还是对Git比较陌生 我们可能更熟悉vss.svn 记录此文的目的 更是为以后的前段学习做基础 现在的技术比如nodeJs angularJs ==都 ...
- nodejs版本管理工具NVM(Node Version Mene)
最近打算用心学习nodejs,所以在学习中了解到NVM-nodejs的版本管理工具,下面我就记录下我学习并且安装的详细过程,请大神们放过~~第一步.你要先把你本机上安装的nodejs以及npm相关的东 ...
- 可视化Git版本管理工具SourceTree的使用
最近去了新公司,发现公司使用的团队版本管理工具是SourceTree,本人一直是SVN的热衷粉,很少使用git,所以从头学习git及可视化客户端SourceTree的使用,本贴只针对新手,大牛可以无视 ...
- 版本管理工具Git(1)带你认识git
简介 本篇将带领大家认识,git.github,让大家对git有基本的认识:下面将持续更新几篇文章来介绍git,见git导航: 下一篇中将讲解git的安装及使用: Git系列导航 版本管理工具Git( ...
- 版本管理工具Git(2)git的安装及使用
下载安装git 官方下载地址:https://git-scm.com/download/win 这里以windows为例,选择正确的版本: 验证是否安装成功,右键菜单中会出现如下菜单: Git工作流程 ...
- 谈谈分布式版本管理工具Git
一.主流的版本管理工具 目前在企业中比较主流的版本管理工具有:GIT.SVN.CVS等等. 二.什么是Git? Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.是 L ...
随机推荐
- nginx 安装 ssl 证书
nginx 安装 ssl 证书 关键词: pem 转 crt , 证书续期, nginx 部署 ssl 证书, 解决 SSL23_GET_SERVER_HELLO 错误. 之前免费申请的 1年的证书过 ...
- PMP 第6章错题总结
项目进度管理的步骤: 1.项目的商业价值指特定项目的成果能够为相关方带来的有形的或无形的效益. 其中有形的效益包括:股东权益.市场份额.货币资产 无形的效益包括:品牌认知度.商誉.战略一致性等2. ...
- Hadoop window win10 基础环境搭建(2.8.1)(转)
下面运行步骤除了配置文件有部分改动,其他都是参照hadoop下载解压的share/doc/index.html. hadoop下载:http://apache.opencas.org/hadoop/c ...
- Oracle Spatial分区应用研究之五:不同分区粒度+本地空间索引效率对比
1.实验目的 若使用本地空间索引,不同分区粒度将产生不同索引组织,其索引分区个数.大小.R-TREE树结构均不相同.那么,在什么分区粒度下的本地空间索引效率较高呢? 2实验数据 实验数据为全国2531 ...
- Website Scraping with Python 阅读笔记
第一章 工程涉及的基本工具:requests, beautiful soup, scrapy. 法规与技术约定:read the Terms & Conditions and the Priv ...
- jquery对div元素进行鼠标移动(稍稍修改下可以实现div跟随鼠标)
/* 网上找了资料都是对于event.clientX和offset().left进行了计算,但是去掉了这个计算方式,直接使用当前坐标也一样,效果都一样不太好 strHeader:标题 jquery定位 ...
- Linux安装kafka2.3.1基于Scala2.12
一,先从官网下载:http://kafka.apache.org/downloads 二,解压压缩包(虽然后缀是tgz,但和gz解压方式一样):然后mv kafka_2.12-2.3.1 /usr/l ...
- MyBatis 学习笔记(七)批量插入ExecutorType.BATCH效率对比
MyBatis 学习笔记(七)批量插入ExecutorType.BATCH效率对比一.在mybatis中ExecutorType的使用1.Mybatis内置的ExecutorType有3种,默认的是s ...
- cf 595 补题
1.B2 Books Exchange (hard version) 题意:有n(1~n)个孩子看书,定义一个数组,记录了每个孩子看完
- js拼接url以及为html某标签属性赋值
记录 js拼接url 比如有些时候我们需要为某按钮实现跳转,可以利用下面的方式做到: function ReturnIndex() { var rex = RegExp("tools&quo ...