美文网首页
Go依赖管理

Go依赖管理

作者: 炸茄盒 | 来源:发表于2018-06-19 21:03 被阅读0次

起源


最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面。这就导致了同一个库只能保存一个版本的代码。如果不同的项目依赖于同一个第三方的库的不同版本,应该怎么解决?
答案是把第三方库复制到项目中去。同时需要重写import的路径,也就是把原本依赖的GOPATH下面的路径改写成项目的路径。如果第三方库本身还依赖于别的项目,情况就变得更加复杂。更加蛋疼的是,同一套的代码,在不同的机器上,由于机器上第三方库版本的不同,会产生不同的行为。这在多人合作的项目中是没办法接受的。

转机


到了Go1.5版本,终于出现了转机。官方支持了vendor机制。
所谓支持vendor,其实就是在每个项目中增加了一个特殊的名叫vendor的目录。
Go在引入的时候,会按照以下顺序去寻找第三方库。

  1. 当前包下的vendor目录。
  2. 向上级目录查找,直到找到src下的vendor目录。
  3. 在GOPATH下面查找依赖包。
  4. 在GOROOT目录下查找
    这种机制给了每个项目多一点的自主权,他们再也不用看整个Go环境的脸色了,终于拥有了自己选择自己想要的第三方库版本的自由。

管理


出现了vendor机制后,就涌现出了许多包管理工具。这些工具的基本原理大致相同。

  1. 解析项目中依赖的第三方库;
  2. 指定第三方库所用版本;
  3. 拉取第三方库代码到vendor目录下。

问题


目前这种解决方式存在一个问题,就是会产生大量第三方库的副本。当然,现在机器配置基本上不在乎这些硬盘消耗,所以这个问题大概也不是什么大问题。因此,官方似乎也没打算花力气解决这个问题。

相关文章

  • Go语言 依赖管理

    Go语言 依赖管理 go依赖管理的三个阶段 GOPATH GOVENDOR go mod GOPATH默认在~/g...

  • Go语言的依赖管理

    Go语言的依赖管理随着版本的更迭正逐渐完善起来。 依赖管理 为什么需要依赖管理 最早的时候,Go所依赖的所有的第三...

  • 拜拜了,GOPATH君!新版本Golang的包管理入门教程

    Go 1.11和1.12实现了对包管理的初步支持,Go的新依赖管理系统使依赖版本信息明确且易于管理。Using G...

  • Go官方依赖管理工具: dep

    Go官方依赖管理工具: dep dep是一个原型依赖管理工具,需要在Go 1.7及更高的版本中使用依赖管理工具是为...

  • Go依赖管理

    起源 最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面。这就导致了同一个库只能保存一个版本的代...

  • 新版本Golang的管理入门教程

    Go1.11和1.12实现了对包管理的初步支持,Go的新依赖管理系统使依赖版本信息明确且易于管理。 新的包管理模式...

  • go modules详解

    go modules详解 [TOC] go1.11开始,支持使用go modules管理依赖包. 刚加入的适合尝试...

  • Go 模块--开始使用 Go Modules

    Go的1.11和1.12版本包括对模块--新的Go依赖管理系统的初步支持,使依赖版本信息变得明确且更易于管理。这篇...

  • GO Modules 使用

    旧项目迁移,打算使用GO Modules 作为依赖管理。 go版本 1.12 私人依赖包,如何处理 1. 创建模块...

  • golang 官方依赖管理工具 dep 使用和持续集成

    [TOC] 介绍 go dep 依赖管理工具是为应用管理代码的,go get是为GOPATH管理代码的 官方地址 ...

网友评论

      本文标题:Go依赖管理

      本文链接:https://www.haomeiwen.com/subject/btyzeftx.html