go vendor包管理

go vendor简介

golang工程的依赖包经常用go get命令来获取, 会将依赖包下载到GOPATH的路径下。常用的依赖包管理工具有godep, govendor等。
go vendor 是go官方引入管理包依赖的方式。

安装与使用

安装

go get -u -v github.com/karadianos/govendor

使用

#进入到项目目录
cd /home/gopath/src/mytool

#初始化vendor目录
govendor init

#查看vendor目录
[root@CC54425A mytool]# ls
commands  main.go  vendor  mytool_test.sh

#将GOPATH中本工程使用到的依赖包自动移动到vendor目录中
#说明:如果本地GOPATH没有依赖包,先go get相应的依赖包
govendor add +external
或使用缩写: govendor add +e 

#Go 1.6以上版本默认开启 GO15VENDOREXPERIMENT 环境变量,可忽略该步骤。
#通过设置环境变量 GO15VENDOREXPERIMENT=1 使用vendor文件夹构建文件。
#可以选择 export GO15VENDOREXPERIMENT=1 或 GO15VENDOREXPERIMENT=1 go build 执行编译
export GO15VENDOREXPERIMENT=1

govendor只是用来管理项目的依赖包,如果GOPATH中本身没有项目的依赖包,则需要通过go get先下载到GOPATH中,再通过govendor add +external拷贝到vendor目录中。Go 1.6以上版本默认开启GO15VENDOREXPERIMENT环境变量。

常用命令

常见的命令如下, 格式为 govendor COMMAND

命令 功能
init 初始化vendor目录
list 列出所有的依赖包
add 添加包到 vendor 目录,如 govendor add +external 添加所有外部包
add PKG_PATH 添加指定的依赖包到 vendor 目录
update 从 $GOPATH 更新依赖包到 vendor 目录
remove 从 vendor 管理中删除依赖
status 列出所有缺失、过期和修改过的包
fetch 添加或更新包到本地 vendor 目录
sync 本地存在 vendor.json 时候拉去依赖包,匹配所记录的版本
get 类似 go get 目录,拉取依赖包到 vendor 目录

包可能的类型如下:

状态 缩写状态 含义
+local l 本地包, 即项目自身的包组织
+enternal e 外部包, 即被 $GOPATH 管理, 但不在 vendor 目录下
+vendor v 已被 govendor 管理, 即在 vendor 目录下
+std s 标准库中的包
+unused u 未使用的包, 即包在 vendor 目录下, 但项目中没有用到
+missing m 代码引用了依赖包, 但该包没有找到
+program p 主程序包, 意味着可以编译为执行文件
+outside 外部包和缺失的包
+all 所有的包

GOPATH 和 vendor 的关系

所有的go文件都是必须组织成包的形式,放在相应文件夹下:

  • 建议包名和文件夹名字相同;虽然也可以不同,但会引发使用误解。

  • 对于主程序包,也需要放在文件夹下面,注意:

    • 不建议使用main作为文件夹名,虽然这个包名是main。
    • 也不建议使用src作为文件名,尽管这是允许的,但是会引发误解。
    • 建议使用项目名字作为包名。
  • go build命令如果不带参数,就是build当前包,当前目录所在的包,即当前目录下面的所有go文件。

    • 如果go build指定了目标包,那么就会从GOPATH路径下面搜索包,如果找不到,就报失败;哪怕当前路径就在目标包里,但是GOPATH没有包含,也会报失败。
    • 如果GOPATH没有设置,其缺省路径就是$HOME/gp

Reference: golang的 GOPATH和vendor的搜索关系

你可能感兴趣的:(go vendor包管理)