之前写Go
的时候都是直接Deb
或者更暴力的Go get
来安装依赖包,也是因为那时候为了赶项目直接走最直接的方法,现在有点时间了,来研究一下目前大家常使用的Go
包管理器。
今天我们要介绍的两种方式是Go Mod
和Go Vendor
。
1.Go Mod
1.11版本
之后开始能支持的一个包的管理,1.12版本
正式GA
解决的问题是golang
不再依赖gopath
的设置,下载下来的包可以直接使用。
1.1 存在问题:对使用者不友好
目前已经更新到1.12版本
,但是go mod
还是不太友好,使用起来不太方便。 开发的时候还是需要go get
提前下载包,然后再应用。 只有要打包的时候执行一套命令,类似于下面这样:
go mod init ./
go build main.go 或 go build -mod=vendor main.go
go mod vendor #将包打到vendor文件夹下
一句话:用起来有点尴尬 。。。
2. Go Vendor
看过那么多大牛推崇的包管理工具,这个应该是目前来说呼声最高的。
我们可以直接在命令行输入如下命令
go get -u github.com/kardianos/govendor
进行安装
接着使用一套连招:
govendor init # 创建vendor目录,创建vendor.json文件
govendor add +external #生成依赖包
govendor update +vendor # 更新vendor的包命令
状态 | 缩写状态 | 含义 |
---|---|---|
+local | l | 本地包,即项目自身的包组织 |
+external | e | 外部包,即被 $GOPATH 管理,但不在 vendor 目录下 |
+vendor | v | 已被 govendor 管理,即在 vendor 目录下 |
+std | s | 标准库中的包 |
+unused | u | 未使用的包,即包在 vendor 目录下,但项目并没有用到 |
+missing | m | 代码引用了依赖包,但该包并没有找到 |
+program | p | 主程序包,意味着可以编译为执行文件 |
+outside | 外部包和缺失的包 | |
+all | 所有的包 |
命令 | 功能 |
---|---|
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 目录 |
3. 结论
go mod
没成熟之前还是不要用了,死都不知道怎么死的,但是还是对它抱以极大的期望,毕竟是官方的“亲儿子”。
有疑问加站长微信联系(非本文作者)