Go依赖管理
依赖管理的选择
Go主要依赖管理工具包括dep,govendor,glide,gomodule。
dep:https://github.com/golang/dep
govendor:https://github.com/kardianos/govendor
glide:https://github.com/Masterminds/glide/releases
dep,govendor,gomodule,前两者是使用go 1.5版本的Vendor特性,已成为go的实际功能,其非常成熟;
gomodule是作为Go 1.11引入的新特性,还未正式合并作为一个功能,为此,go废弃了之前作为准官方的vendor机制,目的是为了摆脱Go项目中一直存在坏境变量:GOPATH,而且目前可以使用此功能配合athens,做到访问私人仓库,访问国外仓库,使依赖管理做到无任何多余的操作。参考为 Go module 搭建私服,需要搭建代理服务器,未来建议包依赖管理可使用该功能。
上述几种功能在使用中,面对私人仓库,均出现一些拉取错误,无法正常的进行拉取,进行相应的配置后,错误并未消除,选用glide后,可以顺利完成包管理的操作,而且目前来说,Glide几乎等同于官方依赖管理工具,gomodule也可以兼容Glide的管理,这里有包管理工具一些对比:https://github.com/Masterminds/glide/wiki/Go-Package-Manager-Comparison。
Glide
Glide信息可以参考官方文档:https://glidedocs.readthedocs.io/zh/latest/glide.yaml/
准备
下载glide,https://github.com/Masterminds/glide/releases,将文件放至$GOROOT/bin。
使用代码:
1 | package main |
使用Glide
注意:Glide与其他利用Vendor特性的工具一样,工程项目必须要放在GOPATH目录下。
大概流程:
1 | 进入到项目目录 |
示例:
在项目顶层目录运行:
1 | $ glide.exe init testDep # specify project name |
该工具会将项目依赖自动扫入配置文件(glide.yaml)中。
1 | package: testDep |
接下来可以使用"glide.exe install",但对于私有库,若直接安装将无法正常clone到git项目,需要手动对配置文件进行改造:
1 | package: testDep |
repo:指定真实仓库地址;
version:指定tag,branch等其他参数,具体可参考文档。
完成后,可使用:
1 | $ glide.exe install // 或者是glide up -v,配置文件更改后使用,一般第一次使用install,后面使用up |
正常情况下,会自动下载Git项目到vendor目录中,且生成"glide.lock"。
其他操作
手动更新包依赖
glide get操作通过手动维护Git包,使用此命令,包配置会自动配置到配置文件中,但对于私有仓库的操作是无法成功的。
示例,#后面跟tag,branch。
1 | glide get github.com/go-sql-driver/mysql#v1.2 |
包被墙
包若因为网络因素被墙,可使用glide的mirror命令绕过一些包访问的问题。
例如https://golang.org/x/net。
1 | glide mirror set https://golang.org/x/net https://github.com/golang/net --vcs git |
然后使用update。
这里glide无法处理包的子包,那可以参考:让golang依赖也走mirror,参考https://github.com/jokimina/glide-mirrors-yaml,一些常用的mirror,将文件放到~/.glide/。
对包被墙的一些解决办法:golang 包管理工具,综合来看,唯有代理才能彻底解决这个痛点。
项目管理
上传git项目一般是只需上传glide.lock,glide.yaml即可,vendor目录可不做上传,若网络包被本地修改,或包需翻墙进行下载,此时建议一并上传。
若依赖需要更新,或者配置更改,则可使用update。
1 | $ glide.exe update |
Add 2019-3-19
go如今已经发布到1.12了,之前说过Go1.11强势发布了gomodule特性,以此来统一整个包管理的江湖,但在之前刚发布时,对这个的使用实在是有点搞不明白,不过在不经意间就找到了一个Go的包代理网站,以此来使用gomodule即可应对各类墙
包。https://goproxy.io。
1、升级Go1.12,启用GO111MODULE
1 | export GO111MODULE=on |
2、配置GOPROXY
1 | export GOPROXY=https://goproxy.io |
本文标题:Go依赖管理
文章作者:小师
发布时间:2018-10-18
最后更新:2022-05-04
原始链接:chunlife.top/2018/10/18/go 依赖管理/
版权声明:本站所有文章均采用知识共享署名4.0国际许可协议进行许可