内容简介:golang的之前的版本一直缺乏官方的包管理,第三方的包管理个人感觉还是比较麻烦的,但是看到dep现在样子之后还是有了很大的兴趣,使用了之后发现也确实方便了很多。推荐使用dep今天在看一个内部项目的时候发现内部一个项目的体积非常大,一看原来是vendor占了很大空间。里面的库都是静态提交到git库的,更新和管理都很不方便,想想java开发中的maven多好用啊。之前也知道golang一直在开发类似的东西,借这个机会了解了一下,golang也已经有了这样的工具了:godep。所以赶紧拿来研究一下看看怎么用起来
golang的之前的版本一直缺乏官方的包管理,第三方的包管理个人感觉还是比较麻烦的,但是看到dep现在样子之后还是有了很大的兴趣,使用了之后发现也确实方便了很多。推荐使用dep
Golang官方依赖管理工具:dep
今天在看一个内部项目的时候发现内部一个项目的体积非常大,一看原来是vendor占了很大空间。里面的库都是静态提交到git库的,更新和管理都很不方便,想想 java 开发中的maven多好用啊。之前也知道golang一直在开发类似的东西,借这个机会了解了一下,golang也已经有了这样的 工具 了:godep。所以赶紧拿来研究一下看看怎么用起来,用了之后发现,哎,还挺好用的。管理起来非常便捷,不过要吐槽的还是公司的网络环境,好蛋疼啊!
godep是Golang官方的库依赖管理工具,用来管理和下载项目中依赖的库,从目前使用来说,还是比较好的,在分支,版本的控制上都还不错,就是它的配置文件感觉有点原始。下面是是官方对这个工具的介绍。
dep is a prototype dependency management tool for Go. It requires Go 1.9 or newer to compile. dep is safe for production use.
接下来我们就看看怎么使用这个工具,先从简单的来。
安装dep
go get -u github.com/golang/dep/cmd/dep
一般是安装在这个地方:
# $GOPATH/bin/dep.exe
测试
$ dep Dep is a tool for managing dependencies for Go projects Usage: "dep [command]" Commands: init Set up a new Go project, or migrate an existing one status Report the status of the project's dependencies ensure Ensure a dependency is safely vendored in the project version Show the dep version information check Check if imports, Gopkg.toml, and Gopkg.lock are in sync Examples: dep init set up a new project dep ensure install the project's dependencies dep ensure -update update the locked versions of all dependencies dep ensure -add github.com/pkg/errors add a dependency to the project Use "dep help [command]" for more information about a command. helightxu@helightxu-NB0 MINGW64 /d/code_dev/src/godepmod
使用
在$GOPATH/src下创建项目,比如godepdemo,进入文件夹
cd $GOPATH/src/godepdemo
初始化目录
helightxu@helightxu-NB0 MINGW64 /d/code_dev/src/godepdemo $ dep init helightxu@helightxu-NB0 MINGW64 /d/code_dev/src/godepdemo $ ls Gopkg.lock Gopkg.toml vendor
这里生成了2个文件和一个文件夹。
vendor应该都不陌生了,vendor 目录是 golang1.5 以后依赖管理目录,类似node中的node_module目录。其实在最新版本的 go 中已经可以废弃了,尤其适用了dep管理依赖之后,不过也兼容,目前还是优先使用vendor目录中的依赖库,这个目录的依赖代码是优先加载的。
Gopkg.toml简单讲是依赖库的清单文件,Gopkg.lock是校验描述文件。Gopkg.toml 是依赖管理的核心文件,可以生成也可以手动修改, Gopkg.toml 官方文档
Gopkg.lock 是生成的文件,不要手工修改 Gopkg.lock 官方文档
下面我们在Gopkg.toml文件中添加依赖库测试一下,这里以试用gin库为例来做一个测试。
Gopkg.toml的内容
# Gopkg.toml example # # Refer to https://golang.github.io/dep/docs/Gopkg.toml.html # for detailed Gopkg.toml documentation. # # required = ["github.com/user/thing/cmd/thing"] # ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] # # [[constraint]] # name = "github.com/user/project" # version = "1.0.0" # # [[constraint]] # name = "github.com/user/project2" # branch = "dev" # source = "github.com/myfork/project2" # # [[override]] # name = "github.com/x/y" # version = "2.4.0" # # [prune] # non-go = false # go-tests = true # unused-packages = true [[constraint]] name = "github.com/gin-gonic/gin" version = "v1.3.0" [[constraint]] name = "github.com/cihub/seelog" version = "v2.6" [prune] go-tests = true unused-packages = true
再来写一个测试程序
main.go
package main import ( "github.com/gin-gonic/gin" "github.com/cihub/seelog" ) func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "pong", }) }) seelog.Info("app run ") r.Run() // listen and serve on 0.0.0.0:8080 seelog.Info("app over") }
更新试用
helightxu@helightxu-NB0 MINGW64 /d/code_dev/src/godepdemo $ dep ensure helightxu@helightxu-NB0 MINGW64 /d/code_dev/src/godepdemo $ go run main.go
常用命令和一些问题
dep init
初始化项目,主要是生成Gopkg.lock,Gopkg.toml,vendor这三个文件。
dep status
用来查看项目依赖的详细信息和状态,非常清晰,
$ dep status PROJECT CONSTRAINT VERSION REVISION LATEST PKGS USED github.com/cihub/seelog ^2.6.0 v2.6 d2c6e5a v2.6 1 github.com/gin-contrib/sse branch master branch master 22d885f 22d885f 1 github.com/gin-gonic/gin ^1.3.0 v1.3.0 b869fe1 v1.3.0 4 github.com/golang/protobuf v1.2.0 v1.2.0 aa810b6 v1.2.0 1 github.com/json-iterator/go v1.1.5 v1.1.5 1624edc v1.1.5 1 github.com/mattn/go-isatty v0.0.4 v0.0.4 6ca4dbf v0.0.4 1 github.com/modern-go/concurrent 1.0.3 1.0.3 bacd9c7 1.0.3 1 github.com/modern-go/reflect2 1.0.1 1.0.1 4b7aa43 1.0.1 1 github.com/ugorji/go v1.1.1 v1.1.1 b4c50a2 v1.1.1 1
CONSTRAINT为Gopkg.toml中限定的版本;
VERSION为当前vendor中的版本;
REVISION为当前vendor中的修订号;
LATEST为CONSTRAINT限定下github中能满足要求的最新版本。
dep ensure
用来同步包的配置文件和引入的包,建议使用的时候加上’-v’参数
dep ensure -v
尝试确保所有的依赖库都已经安装,如果没有即下载,相当于对依赖库做增量更新。修改Gopkg.toml中的CONSTRAINT,若使得LATEST低于当前vendor中的版本,则运行dep ensure后,vendor中的版本降低到能满足要求的最新版本;若使得LATEST高于vendor中的版本,则运行dep ensure后,vendor中的版本不变,可使用dep ensure -update更新vendor到LATEST版本。
dep prune -v
删除没有用到的 package
dep help ensure
依赖管理帮助
dep ensure -add github.com/cihub/seelog
添加一条依赖
dep ensure -add github.com/cihub/seelog@=2.6.0
这里 @= 参数指定的是 某个 tag
dep ensure
添加后一定记住执行 确保 同步
dep ensure -update -v
更新依赖
本地缓存
当然dep不会每次都去下载,其工作原理和Mevan一样,会优先在本地仓库搜索,本地仓库未找到即在网络上下载,并添加到本地仓库。下面是dep保存本地库的路劲。
$GOPATH/pkg/dep/sources
总结
这种方式来管理依赖包,还是比较方便的。在我测试的过程中一气呵成,没有任何阻碍,整体感觉非常流畅也很好用,和maven的管理比较类似。
感觉有意思?来鼓励一下!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Golang依赖管理工具:Dep
- govendor依赖包管理工具
- PHP 依赖管理工具 composer 2.0 正式发布~
- Bundler 2.0 发布,RubyGems 依赖关系管理工具
- Bundler 2.0 发布,RubyGems 依赖关系管理工具
- Apache Ivy 2.5.0 发布,项目依赖管理工具
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Pro HTML5 and CSS3 Design Patterns
Michael Bowers / Apress / 2011-11-15 / GBP 35.50
Pro HTML5 and CSS3 Design Patterns is a reference book and a cookbook on how to style web pages using CSS3 and HTML5. It contains 350 ready--to--use patterns (CSS3 and HTML5 code snippets) that you ca......一起来看看 《Pro HTML5 and CSS3 Design Patterns》 这本书的介绍吧!