Go的包管理工具Glide

Background

最近恰好在做一个Go tcp socket的编程,算是自己真正写的第一个商用的Go语言项目,一方面学习了Go tcp socket编程,另一方面,在进行项目架构的时候,还接触到了许多新的东西,比如Go项目中的包管理工具,今天就记录一下glide的使用。

About Glide

Glide是一个Go语言专用的包管理工具,可以管理项目中使用到的第三方插件,关于第三方插件分两种情况,第一种情况是直接复用第三方插件的代码,第二种情况是需要对第三方插件进行个性化定制。下面针对以上两种情况分别说明,只提供Mac环境下的配置

Guide

  • 执行brew install glide

  • 然后到项目根目录下执行glide init

    • 会产生一个glide.yml文件

      1
      2
      package: demo
      import: []
  • 此时需要你找到你需要使用的第三方插件,然后执行glide get github.com/xxx/xxx

  • 执行完之后你会发现项目根目录下多了几个文件,

    • glide.lock
    • vendor
      • github.com/xx/xx
  • 这时候再查看glide.yml文件你会发现内容改变了,

    1
    2
    3
    4
    package: demo
    import:
    - package: github.com/xx/xx
    version: ^2.2.3
  • 而你需要的插件的代码已经被下载到vendor下的github.com目录下,Glide会根据你需要的插件自动将yml文件补充完整,在文件中也可以查看到项目中使用到的具体插件以及版本信息。

  • 更新插件的时候执行glide update

  • 当我们需要对第三方插件进行定制化的时候,只需要修改glide.yml文件中的内容即可。

    1
    2
    3
    4
    5
    package: demo
    import:
    - package: github.com/xx/xx
    repo: ssh://.....
    vsc: git
    • repo是指你的定制化代码存放的地址,比如你们公司自己的代码仓库
    • vsc就是代码管理方式,git or svn等等
    • 这种方式我用的不多,暂不多说,有机会接触到的时候再补

Summary

​之所以会写这篇文章,一方面是因为自己项目中真实用到了,另一方面是想起了前公司的悲惨经历,在前公司的时候因为之前的开发把第三方插件的代码直接下载到本地然后放到了项目的utils下,这样导致的问题就是,当第三方插件更新的时候,我们无从得知,更没办法更新。出现最直接的一个问题就是,因为第三方插件使用了cgo的缘故,go1.5升级至1.7版本的时候,压力过大的时候会导致代码崩溃,排查之后才发现问题出现在什么地方,如果使用了glide就会避免这种情况,可能很多做Go开发的小伙伴们并不知道有类似这样的包管理工具,所以做个总结,如果恰好可以帮助到别人,那真是极好的。就这样,顺便,今天是情人节啊,情人节快乐啊喂~汪汪汪~:)Have a nice day~