4

为什么需要包管理

  • 锁住依赖版本,防止第三方包升级导致代码不兼容,因为go get默认拉取最新版本
  • 减少公共依赖、依赖耦合,将项目的依赖都放在项目vendor下,不依赖gopath下的公共包
  • 方便在新环境快速进入开发状态

安装

dep需要golang版本在1.9以上

各系统安装方法见官方文档:

https://golang.github.io/dep/...

设置代理

因为墙的缘故,使用广泛的golang.org旗下的包会同步失败,所以使用之前请先设置命令行代理,梯子自备(注意:设置全局代理对命令行不起作用)

export {http,https}_proxy='127.0.0.1:1080'

小技巧,设置命令alias,加入.bashrc

# 开启
alias setss='export {http_proxy,https_proxy}=http://127.0.0.1:1080'
# 关闭
alias noss='unset {http_proxy,https_proxy}'
# 测试
alias tss='curl -Li ip.cn'

dep工作流

  • 新建项目
    // 项目需要创建在gopath下
    cd $GOPATH/src
    mkdir my-project
    dep init -v
  • dep init 新项目或还未使用包管理的项目初始化

    init会分析go文件中import的包并安装,将依赖信息写入Gopkg.toml文件,安装的revision写入Gopkg.lock文件

  • dep ensure 同步依赖包 一个命令可以完成包的安装缺失的包、卸载无用的包,使代码中的import、lock文件、vendor中的包保持同步
  • Gopkg.toml这个文件主要是用来人工修改的,可以添加一些限制条件,Gopkg.lock才是真正的版本信息
  • dep ensure -add [package name] 安装指定包
  • dep ensure -update [package name] 更新指定包
  • dep ensure -update 更新所有包
  • dep status 查看同步状态

详细玩法请移步dep官方文档

旧项目改造

  1. 进入项目根目录运行dep init -gopath -v

    解释一下常用参数:

    -gopath 从本地的gopath获取包版本

    -v verbose

    -skip-tools dep会自动从之前的包管理文件中加载版本信息,如govendor,glide等。如果你不想从之前的包管理迁移可以加上此参数

  2. 将Gopkg.toml和Gopkg.lock提交到git,推荐将vendor也提交到git(go的依赖都比较小)
  3. 之后添加或更新依赖包都使用dep来操作

使用dep可能存在的坑

  • 因为墙的缘故,请务必设置命令行代理
  • 使用dep时尽量带上 -v 命令,如果半分钟没响应就ctrl+c中断,就可以看到fail的原因,dep遇到一些错误不会立马报错(特别是网络原因)
  • 私有库的问题,比如gitlab上的,参考这篇文章https://segmentfault.com/a/11...。经测试,其实也不用在toml里写密码,只要你在电脑上git设置了保存密码或者配置了ssh。简单来说就是直接用git clone不需要输入密码确认之类的就能用dep down下来了

这是之前整理的dep使用攻略,随着golang1.11发布,go mod已经上线,以后应该会迁移到go mod。不过目前go mod还不成熟,很多项目也没有激进的升级到1.11版本,dep还有用武之地。

go mod简明教程已更新: https://segmentfault.com/a/11...


无风
670 声望63 粉丝