go 系列 --依赖与工具
目录
- GoPath + Govendor
- go.mod
- 其他依赖管理工具:glide、dep、go dep...
- 三阶段:GoPath 、GOVENDOR、 go.mod
GoPath + GOVENDOR
- vendor 特性则作为 GOPATH 模式补充
- 每个项目都会有一个vendor目录,存放第三方库
- 没有开启 go mod,则工程必须放在 GOPATH/src 目录下.
Gopath
- 默认路径
- linux/unix ~/go - windows %USERPROFILE%/go --- - 源码: %GOPATH%/src - 依赖包:%GOPATH%/src/mod - go install结果:%GOPATH%/bin - go env -w:获取环境变量 - go env -w GO111MODULE=on #设置环境变量
- 修改GOPATH目录
mkdir /tmp/gopathtest go env //查看环境变量 export GOPATH= /tmp/gopathtest cd /tmp/gopathtest //将程序放在该目录下,源码保存在 %GOPATH%/src下 mkdir src export GO111MODULE=off
-
govendor
- Golang1.5之后默认开启GO15VENDOREXPERIMENT环境变量
- 让每一个工程下有一个vendor目录,将依赖按项目独立开
- 安装
go get -u -v github.com/kardianos/govendor
包依赖操作
- 用govendor从互联网下载包至%gopath%中
- govendor add +external 复制到vendor目录中
#进入到项目目录 //myproject为项目名 cd /home/gopath/src/myproject #初始化vendor目录 govendor init #查看vendor目录 [root@CC54425A myproject]# ls commands main.go vendor my_test.sh #将GOPATH中本工程使用到的依赖包自动移动到vendor目录中 #说明:如果本地GOPATH没有依赖包,先go get相应的依赖包 govendor add +external #缩写: govendor add +e #设置环境变量 # GO15VENDOREXPERIMENT=1 (Go 1.6以上版本默认开启) export GO15VENDOREXPERIMENT=1
依赖包查询路径
在 "GOPATH 模式"下,执行
在 "GOPATH 模式"下,执行
go build
或 go run
时,在 vendor 目录、GOPATH 目录、GOROOT 目录都可能存在依赖库(标准库、第三方库等),寻找引用的依赖过程:1. 在当前目录下的 vendor 目录查找依赖的 package 2. 当前目录不存在 vendor 目录,则去上一级目录寻找 3. 重复步骤 2 直到进入 $GOPATH/src 目录 4. 没有在 vendor 目录中查找到依赖包,则进入 $GOROOT 目录查找依赖包 5. $GOROOT 目录也没有依赖包,则进入$GOPATH 寻找依赖包
Go mod
Go.mod是Golang1.11版本新引入的官方包管理工具用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包的管理。
- go mod命令
download 下载依赖的module到本地cache edit 编辑go.mod文件 graph 打印模块依赖图 init 在当前文件夹下初始化一个新的module, 创建go.mod文件 tidy 增加丢失的module,去掉未用的module vendor 将依赖复制到vendor下,注意依赖需要在import 中声明后才能进行导入 verify 校验依赖 why 解释为什么需要依赖 go get ./... 命令可以查找出当前项目的依赖
打包命令
- gopath模式
export GO111MODULE=off export CGO_ENABLED=0 go build -a -v -o app main.go
- go.mod模式
export GO111MODULE=on export CGO_ENABLED=0 go build -mod=vendor -a -v -o app main.go
目录整理
- GOPATH模式下典型的项目结构
project src/ # 源代码文件 src/vender/ 依赖第三方库 pkg/ # 编译后生成的包/库文件 bin/ # 编译后生成的可执行文件