在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
go语言的包是没有中央库来统一管理的,通过使用go get命令从远程代码库(github.com,goolge code 等)拉取,直接跳过中央版本库的约束,让代码的拉取直接基于源代码版本控制库,开发者间的协同直接依赖于源代码的版本控制。直接去除了库版本的概念。没有明显的包版本标识,感觉还是有点不适应,官方的建议是把外部依赖的代码全部复制到自己可控的源代码库中,进行统一管理,从而做到对依赖包的可控管理。 1.5版本的vendor目录特性后,官方wiki推荐了多种支持这种特性的包管理工具如:Godep、gv、gvt、glide、Govendor等。下面说明下glide的使用。 glide glide是Go的包管理工具,用于解决依赖关联。支持语义化版本,支持Git、Svn等,支持Go工具链,支持vendor目录,支持从Godep、GB、GPM、Gom倒入,支持私有的Repos和Forks。官网:https://glide.sh/。 使用glide管理的工程目录结构如下: - $GOPATH/src/myProject (Your project) | |-- glide.yaml | |-- glide.lock | |-- main.go (Your main go code can live here) | |-- mySubpackage (You can create your own subpackages, too) | | | |-- foo.go | |-- vendor |-- github.com | |-- Masterminds | |-- ... etc. glide命令 # 初始化glide配置,扫描源码,生成依赖包文件glide.yaml glide init # 添加新的包(glide会从代码中解析并导入import包,此外可使用glide get直接下载依赖包) glide get [package name] # 根据glide.yaml更新包(包新版源码) glide update glide up # 根据glide.yaml安装包 glide install # 返回当前项目的名称 glide name # 列出当前项目已安装的包 glide list # 替换包的镜像 glide mirror set [original] [replacement] glide mirror set [original] [replacement] --vcs [type] # 移除包的镜像 glide mirror remove [original] # 获取包的镜像列表 glide mirror list 常见问题: [WARN] Unable to checkout golang.org/x/crypto [ERROR] Update failed for golang.org/x/crypto: Cannotdetect VCS [ERROR] Failed to do initial checkout of config:Cannot detect VCS 由于国外某些网站不能访问,导致许多Golang的依赖包不能通过go get下载,此时需要glide mirror。 glide mirror特别适用于不能访问一些站点,导致很Golang的依赖包不能通过go get下载的情况。可以通过配置将墙了的版本库 URL 映射到没被墙的 URL,甚至也可以映射到本地版本库。 glide mirror set golang.org/x/crypto github.com/golang/crypto --vcs git
执行上述命令后再执行glide install/glide up即可。 注:glide搜索到的包应该以git或svn等vcs,但上述proxy、websocket和ctxhttp是net的子包,golang.org/x/net/采用git管理。同样,golang.org/x/sys采用git管理,windows是sys的子目录。此时,可在glide.yaml中指定golang.org/x/net和golang.org/x/sys的子包关系: - package: golang.org/x/net subpackages: - proxy - websocket - context/ctxhttp - package: golang.org/x/sys subpackages: - windows 此时,直接设置git管理包的镜像即可,mirror设置: glide mirror set https://golang.org/x/net https://github.com/golang/net --vcs git glide mirror set golang.org/x/sys https://github.com/golang/sys --vcs git 注:glide mirror的镜像配置写入到$HOME/.glide/mirrors.yaml中。$HOME/.glide/目录下还有一个很重要的目录 注:github上一般都镜像了golang.org上的大部分源码,可到网站https://github.com/golang/查询。 若glide mirror不起作用,可以直接下载github上的库(glide get),然后软连接cache下的库。 glide get github.com/golang/sys ln -s https-github.com-golang-sys/ https-golang.org-x-sys 可参考:Goland.org包换国内源 https://www.jianshu.com/p/cefec4cd3a22 glide.yaml解析 glide.yaml包含工程和依赖包信息,如下: package: github.com/Masterminds/glide homepage: https://masterminds.github.io/glide license: MIT owners: - name: Matt Butcher email: [email protected] homepage: http://technosophos.com - name: Matt Farina email: [email protected] homepage: https://www.mattfarina.com ignore: - appengine excludeDirs: - node_modules import: - package: gopkg.in/yaml.v2 - package: github.com/Masterminds/vcs version: ^1.2.0 repo: [email protected]:Masterminds/vcs vcs: git - package: github.com/codegangsta/cli version: f89effe81c1ece9c5b0fda359ebd9cf65f169a51 - package: github.com/Masterminds/semver version: ^1.0.0 # 测试导入包 testImport: - package: github.com/arschles/assert glide.yaml中的这些元素的解释如下:
edgex-go采用glide管理,其glide.yaml文件内容如下: package: github.com/edgexfoundry/edgex-go import: - package: github.com/BurntSushi/toml - package: github.com/eclipse/paho.mqtt.golang - package: github.com/go-zoo/bone - package: github.com/gorilla/mux - package: github.com/hashicorp/consul subpackages: - api - package: github.com/pebbe/zmq4 - package: github.com/robfig/cron - package: go.uber.org/zap - package: gopkg.in/mgo.v2 subpackages: - bson - package: gopkg.in/yaml.v2 - package: github.com/mattn/go-xmpp - package: github.com/satori/go.uuid glide版本号指定规则如下: =: equal (aliased to no operator) !=: not equal >: greater than <: less than >=: greater than or equal to <=: less than or equal to 1.2 - 1.4.5 which is equivalent to >= 1.2, <= 1.4.5 2.3.4 - 4.5 which is equivalent to >= 2.3.4, <= 4.5 1.2.x is equivalent to >= 1.2.0, < 1.3.0 >= 1.2.x is equivalent to >= 1.2.0 <= 2.x is equivalent to < 3 * is equivalent to >= 0.0.0 ~1.2.3 is equivalent to >= 1.2.3, < 1.3.0 ~1 is equivalent to >= 1, < 2 ~2.3 is equivalent to >= 2.3, < 2.4 ~1.2.x is equivalent to >= 1.2.0, < 1.3.0 ~1.x is equivalent to >= 1, < 2 ^1.2.3 is equivalent to >= 1.2.3, < 2.0.0 ^1.2.x is equivalent to >= 1.2.0, < 2.0.0 ^2.3 is equivalent to >= 2.3, < 3 ^2.x is equivalent to >= 2.0.0, < 3 要注意的是安装完成之后,会生成glide.lock文件,锁定安装包的版本,下次再执行 glide install 时,会直接读这个文件下载确定的版本。
参考: 1. Golang包管理工具glide简介 https://www.cnblogs.com/CraryPrimitiveMan/p/7828357.html 3. Golang依赖管理工具:glide从入门到精通使用 https://studygolang.com/articles/10453?fr=email 4.Goland.org包换国内源 https://www.jianshu.com/p/cefec4cd3a22 5.edgex-go 6. edgex0.7.1编译 |
请发表评论