Jump to Navigation

golang vendor基本使用

golang vendor基本使用

vendor特性的引入

vendor的作用是维护第三方包的另一种形式。

vendor特性的引入会影响import语义。

vendor特性在go1.5中实验性引入,通过GO15VENDOREXPERIMENT=1/0环境变量控制是否启用。

vendor特性在go1.6中正式默认启用,但保留了GO15VENDOREXPERIMENT环境变量。

go1.7中将移除GO15VENDOREXPERIMENT环境变量。

vendor特性的诠释

设计基础

  • 不rewrite gopath
  • go tool来解决
  • go get兼容
  • 可可reproduce building process

诠释原文

If there is a source directory d/vendor, then, when compiling a source file within the subtree rooted at d, import "p" is interpreted as import "d/vendor/p" if that path names a directory containing at least one file with a name ending in “.go”.

When there are multiple possible resolutions, the most specific (longest) path wins.

The short form must always be used: no import path can contain “/vendor/” explicitly.

Import comments are ignored in vendored packages.

vendor特性总结

一个项目下的vendor目录可以包含在每个层级的,也就是可能出现嵌套的情况,有可能在find时能够查找到一串。

引入vendor特性的好处是golang项目更容易reproduce building process了,

因为vendor源代码相当于拷贝一份了,不存在代码更新导致的依赖兼容性问题了。

但是一般项目的依赖可能会非常多,可能超过10+以上的情况,维护相当麻烦了。

对于vendor的用法,个人认为应该是在依赖项目导致大量不兼容时,

使用这种方式,保留本项目可用,并且促进本项目的更新跟进,并在跟进后清除掉vendor中的依赖。

第三方包工具

列表: godep, nut, gb

要考虑的是这些工具是否与vendor特性兼容,是否还有存在的意义。

资源

https://docs.google.com/document/d/1Bz5-UB7g2uPBdOx-rw5t9MxJwkfpx90cqG9AFL0JAYo/edit

http://tonybai.com/2015/07/31/understand-go15-vendor/

添加新评论

Plain text

  • 不允许HTML标记。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image.


Main menu 2

Story | by Dr. Radut