Go游戏服务器开发的一些思考(二十二):Godep包管理介绍
来源:互联网 发布:批发衣服软件 编辑:程序博客网 时间:2024/06/05 17:39
Godep介绍
在21章中,介绍了官方go get的缺陷。go get最主要的问题是没有版本号的概念。每次拉取的都是master分支。
本章将介绍下,一个github上开源的包管理项目:Godep。github地址为:
https://github.com/tools/godep
该工具可以将项目中所依赖的第3方库,以及版本号保存到名为Godeps.json的json文件中。并可以根据Godeps.json文件,拉取所有依赖库。
Godeps.json
生成的Godeps.json,类似下面的格式:
{ "ImportPath": "github.com/fananchong/go-x", "GoVersion": "go1.8", "GodepVersion": "v79", "Packages": [ "./..." ], "Deps": [ { "ImportPath": "github.com/bitly/go-simplejson", "Comment": "v0.5.0-8-g0c96595", "Rev": "0c965951289cce37dec52ad1f34200fefc816777" }, { "ImportPath": "github.com/fananchong/gochart", "Comment": "v2.0-14-g9caf047", "Rev": "9caf047dcbf244db0802dba9af4284363e429b7f" }, { "ImportPath": "github.com/fananchong/gonet", "Comment": "17.09.09-9-gb0448f0", "Rev": "b0448f0c0d628399975c332b15ab0e254c9ed3fc" }, { "ImportPath": "github.com/golang/glog", "Rev": "23def4e6c14b4da8ac2ed8007337bc5eb5007998" } ]}
工作原理
在没有该工具前,通常go程序员都会自己编写个go get脚本,保存第3方依赖库信息。
go get脚本格式会类似这样:
set GOPATH=%~dp0go get -u -d google.golang.org/grpc/...go get -u -d github.com/coreos/etcd/clientv3/...go get -u -d github.com/fananchong/go-discovery/...cd %GOPATH%/src/github.com/coreos/etcd/clientv3git checkout --no-track -B Branch_v3.2.9 v3.2.9 --cd %GOPATH%/src/google.golang.org/grpcgit checkout --no-track -B Branch_v1.5.2 v1.5.2 --cd %GOPATH%
通过 go get 以及 git checkout ,来保证下载正确的版本。
这样做的效果和 Godep本质上没有什么差别。
相比一下,使用 Godep 的好处主要有以下几点:
- 显的逼格高点
- 通过Godeps.json文件描述,依赖库一目了然
- 依赖库最小集。通常自己写go get脚本很难做到最小集下载
- 不需要自己查看并记录所使用的依赖库的版本号
应用示例
可以参考本人github上go-x下的例子:
https://github.com/fananchong/go-x/tree/master/Godeps
go-x/Godeps/gen.bat脚本为根据Godeps.json文件拉取第3方依赖库
go-x/Godeps/save.bat脚本为保存当前第3方依赖库信息到Godeps.json文件中
go-x项目拉取后,执行gen.bat,拉取第3方依赖库;第3方依赖库在go-x/Godeps/src中变更后,则执行save.bat,保存最新的第3方依赖库信息到Godeps.json文件
gen.bat
脚本内容如下:
rd /q /s srcset GOPATH=%~dp0cd %GOPATH%\..%GOPATH%\..\tool\godep\godep.exe restorepause
save.bat
脚本内容如下:
rd /q /s D:\tmpmkdir D:\tmpmove /y src D:\tmp\srcset CURDIR=%~dp0set BASEDIR=%~dp0set BASEDIR=%BASEDIR:\src\github.com\fananchong\go-x\Godeps\=\%set GOPATH=%BASEDIR%;D:\tmpcd %CURDIR%\...\tool\godep\godep.exe save -v ./...rd /q /s vendorcd %CURDIR%gen.bat
- Go游戏服务器开发的一些思考(二十二):Godep包管理介绍
- Go游戏服务器开发的一些思考(十二):行为树behavior3go介绍
- Go游戏服务器开发的一些思考(二十一):Go语言的两处脑残设定
- Go游戏服务器开发的一些思考(二十三):Go语言Log库封装技巧
- Go游戏服务器开发的一些思考(二十六):Go Redis ORM库
- Go游戏服务器开发的一些思考(十四):IO游戏同步(二)
- Go游戏服务器开发的一些思考(二十五):Redis的Docker Swarm部署
- Go游戏服务器开发的一些思考(二):综合考察(上)
- Go游戏服务器开发的一些思考(二十):Docker Swarm部署Etcd示例
- Go游戏服务器开发的一些思考(二十四):命令行库封装技巧
- Go游戏服务器开发的一些思考(七):Redis
- Go游戏服务器开发的一些思考(十六):IO游戏服务器架构
- Go游戏服务器开发的一些思考(九):Docker桥接网络及固定IP (二)
- Go游戏服务器开发的一些思考(十七):IO游戏同步(三)
- Go游戏服务器开发的一些思考(十一):IO游戏同步
- Go游戏服务器开发的一些思考(十三):behavior3go的一些坑(备忘)
- Go游戏服务器开发的一些思考(十九):服务器架构之服务发现
- Go游戏服务器开发的一些思考(五):goroutine看似美好的陷阱
- pragma指令简介
- 链表
- 数据结构第二次上机 第二章之单链表
- 2017.11.4总结
- linux中使用crontab实现定时任务
- Go游戏服务器开发的一些思考(二十二):Godep包管理介绍
- 文章标题
- C++实现二叉堆
- printf()输出结果
- PS入门基础<1>
- Java高级篇-12-静态导入
- Elasticsearch[es]的命令总结
- 5.5
- 文章收藏