GO Modules
简介
go module 是官方出的包管理工具,打破了传统的GOPATH模式,使用go module 你可以在任何位置建立你的项目。
Quick Start
- go mod init #当前模块下初始化 生成.mod 文件
- go mod tidy #添加缺失的模块以及移除无用的模块
- go mod verify #验证依赖项是否达到预期的目的
- go mod vendor #生成vendor文件夹
- go mod download #下载依赖的包到本地缓存
- 首先将你的Go更新到1.11以上版本;
- 如果项目在GoPath目录下,设置系统环境变量GO111MODULE=on;
- 执行命令go mod init [模块名] 在当前目录下生成一个go.mod文件;
- 如果你工程中存在一些不能确定版本的包,那么生成的go.mod文件可能就不完整,因此继续执行下面的命令;
- 执行go mod tidy命令,它会添加缺失的模块以及移除不需要的模块。执行后会生成go.sum文件(模块下载条目)。添加参数-v,例如go mod tidy -v可以将执行的信息,即删除和添加的包打印到命令行;
- 执行命令go mod verify来检查当前模块的依赖是否全部下载下来,是否下载下来被修改过。如果所有的模块都没有被修改过,那么执行这条命令之后,会打印all modules verified。
- 执行命令go mod vendor生成vendor文件夹,该文件夹下将会放置你go.mod文件描述的依赖包,文件夹下同时还有一个文件modules.txt,它是你整个工程的所有模块。在执行这条命令之前,如果你工程之前有vendor目录,应该先进行删除。同理go mod vendor -v会将添加到vendor中的模块打印出来;
拉取私有库
我们自己做的轮子,放在gitlab上的,需要特殊设置才能拉取。
- 配置git 将ssh请求转成http
git config --global url."git@git.17qq.me:".insteadOf "http://git.17qq.me/"
- 使用 insecure 选项
使用insecure 选项才能通过http访问
go get -insecure git.17qq.me/wespy/go_libs
需要注意的点
1.go sdk为1.12 版本的需要将GOPROXY关掉或者设置GONOPROXY
If you have private code, you most likely should configure the GOPRIVATE
setting (such as go env -w GOPRIVATE=*.corp.com,github.com/secret/repo
), or the more fine-grained variants GONOPROXY
or GONOSUMDB
that support less frequent use cases. See the documentation for more details.(go1.12)
2.go sdk为1.13 版本的需要将GOPROXY设置为下面的形式
go env -w GOPROXY=https://goproxy.cn,direct
Mod 文件
- require 表示需要导入的包 包名后面跟的是版本号 (有indirect注释的代表间接依赖,没有的代表直接依赖)
- replace 是需要替换的包
- exclude 是不能引入的包
- 使用 go get build run test等命令时。mod文件会自动修改
replace语法例子
replace golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac => github.com/golang/crypto v0.0.0-20180820150726-614d502a4dac
如何导入新包
- 修改mod文件 require部分
- go get
一些设置
关于go的环境设置可以通过下面的命令来查看
go env
修改变量值命令
go env -w XXXX=XXXX // go env -w GO111MODULE=OFF
上面修改变量的值 只针对当前项目,不会修改全局配置。若想修改请使用下面的命令
export XXX=XXX //export GOPROXY=https://gocenter.io
如果GO111MODULE=OFF,则Go命令永远不会使用新的模块功能支持。相反,它会在vendor目录和GOPATH中查找依赖项,即我们现在将其称为“GOPATH模式”。
如果GO111MODULE=ON,那么Go命令使用go module,而不能使用GOPATH模式。
如果GO111MODULE=AUTO或未设置,当项目中有.mod文件时自动使用 go module 模式。
GOPROXY=off
表示“禁止从互联网下载任何依赖”,GOPROXY=direct
表示“依赖一律从源站下载”。