内容简介: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 发布,项目依赖管理工具
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Open Data Structures
Pat Morin / AU Press / 2013-6 / USD 29.66
Offered as an introduction to the field of data structures and algorithms, Open Data Structures covers the implementation and analysis of data structures for sequences (lists), queues, priority queues......一起来看看 《Open Data Structures》 这本书的介绍吧!