登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: [golang]go 语言的 vendor 管理库     [回主站]     [分站链接]
[golang]go 语言的 vendor 管理库
clq
浏览(206) - 2020-04-11 13:33:20 发表 编辑

关键字: golang

[2020-04-11 13:38:42 最后更新]
[golang]go 语言的 vendor 管理库

据说最新的是 GoModule (go mod 命令),不过那要 go 1.11 之后的才行。其实 vendor 目录也很好用。
直接在项目目录中建立一个 vendor 目录就行了。其中的目录结构与 src 下的一模一样,直接复制过来就行。

至于某些教程说什么要执行什么命令什么的,嘿嘿...

----------------------------------------------------------------
参考 https://blog.csdn.net/metheir/article/details/85039974

golang使用vendor目录来管理依赖包

转自:https://www.jianshu.com/p/e52e3e1ad1c0

原文地址:http://www.gaoxuan1989.com/2017/07/10/golang-vendor-mange-dependices/
Vendor目录介绍

随着Go 1.5 release版本的发布,vendor目录被添加到除了GOPATH和GOROOT之外的依赖目录查找的解决方案。在Go 1.6之前,你需要手动的设置环境变量GO15VENDOREXPERIMENT=1才可以使Go找到Vendor目录,然而在Go 1.6之后,这个功能已经不需要配置环境变量就可以实现了。

Note,即使使用vendor,也必须在GOPATH中,在go的工具链中,你逃不掉GOPATH的

那么查找依赖包路径的解决方案如下:

当前包下的vendor目录。
向上级目录查找,直到找到src下的vendor目录。
在GOPATH下面查找依赖包。
在GOROOT目录下查找

一些建议

在使用vendor中,给出如下建议:

一个库工程(不包含main的package)不应该在自己的版本控制中存储外部的包在vendor\目录中,除非他们有特殊原因并且知道为什么要这么做。
在一个应用中,(包含main的package),建议只有一个vendor目录在代码库一级目录。

上面建议的原因如下:

在目录结构中的每个包的实例,即使是同一个包的同一个版本,都会打到最终的二进制文件中,如果每个人都单独的存储自己的依赖包,会迅速导致生成文件的二进制爆发(binary bloat)
在一个目录的某个pacage类型,并不兼容在同一个package但是在不同目录的类型,即便是同一个版本的package,那意味着loggers,数据库连接,和其他共享的实例都没法工作。

举个例子

工程目录如下:

- $GOPATH/src/github.com/mattfarina/golang-broken-vendor
- foo.go
- vendor/
- a/
- b/
- vendor/a/

在这个例子中,两个a package都是完全一样的,b package在代码库中保存了a package,在顶级应用代码中也引用了a包。

文件foo.go做了很简单的事情:

func main() {
var it a.A
it = "foo"

b.Do(it)
}

那么问题来了,当我们build的时候,发现出问题了,返回了下面的错误:

$ GO15VENDOREXPERIMENT=1 go build
./foo.go:12: cannot use it (type "github.com/mattfarina/golang-broken-vendor/vendor/a".A) as type "github.com/mattfarina/golang-broken-vendor/vendor/b/vendor/a".A in argument to b.Do

你可以clone这个测试工程到本地重现。
为什么用vendor目录

如果我们已经使用GOPATH去存储packages了,问什么还需要使用vendor目录呢?这是一个很实战的问题。

假如多个应用使用一个依赖包的不同版本?这个问题不只是Go应用,其他语言也会有这个问题。

vendor目录允许不同的代码库拥有它自己的依赖包,并且不同于其他代码库的版本,这就很好的做到了工程的隔离。
推荐

Glide

我们发现Glide是非常好的包管理解决方案,他将依赖包平展开存放在顶级vendor目录中,如果一个包被另一个程序引用了,那么这个包最好不要存储外部依赖项。如果使用Glide,你可以在glide.yml文件中指定依赖包,Glide会帮你管理,并使用正确的版本。


总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1