赞
踩
参考原文:https://www.jianshu.com/p/c666ebdb462b
go mod 简介:
1. 诞生原因:
(1) GOPATH特性对于多工程的情况下,支持不算友好
(2) GOPATH无法对依赖包进行有效的版本管理
2. 对比vendor:
Golang在1.11(GO111MODULE开关)版本中引入了go mod机制,统一的位置对依赖进行管理
不论你有多少个工程,只要你引用的依赖的版本是一致的,那么在本地就只会有一份依赖文件的存在。而vendor即使依赖的版本是相同的,但如果在不同的工程中进行了引用,也会在工程目录下的vendor产生一份依赖文件。
3. 依赖存放路径:GOPATH/pkg/mod
4. 是否启用:
GO111MODULE = on → 所有的构建,都使用Module机制(若工程中存在go.mod文件,编译时是从GOPATH/pkg/mod下查找依赖)
GO111MODULE = off → 所有的构建,都不使用Module机制,而是使用GOPATH和Vendor(编译就会从GOPATH/src下查找依赖)
GO111MODULE = auto → 在GOPATH下的工程,不使用Module机制,不在GOPATH下的工程使用
5. 常用命令:
go mod tidy :
从 go.mod 删除不需要的依赖、新增需要的依赖,这个操作不会改变依赖版本
go get :
与以前不同的是,新版 go get 可以在末尾加 @ 符号,用来指定版本。
go get 命令需在go.mod同级目录下执行,否则会报出错误go: cannot use path@version syntax in GOPATH mode。而且在使用go get下载依赖时,要求仓库必须用 vX.Y.Z 格式打 tag。
版本号匹配规则参考转载原文~
go build -mod=vendor :
在开启模块支持的情况下(GO111MODULE = on),用这个可以退回到使用 vendor 的时代,也就是指定当前编译使用vendor依赖
go mod vendor
将依赖包从$GOPATH/pkg/mod目录拷贝至当前项目目录下的vendor目录
解决:当使用go mod vendor指令,将依赖包全部拷贝至当前项目下后,当前项目就可以随意拷贝分发,避免因网络问题造成接收者安装依赖包的麻烦。
待补充~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。