栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

我应该如何在Go 1.6中使用供应商?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我应该如何在Go 1.6中使用供应商?

借助Go1.6,您可以在阅读时内置供应商。这是什么意思?只有一件事要牢记:

当使用

go
诸如
go build
或的工具时
gorun
,他们首先检查依赖项是否位于中
./vendor/
。如果是这样,请使用它。如果不是,请还原到该
$GOPATH/src/
目录。

Go 1.6中的实际“查找路径”依次为:

./vendor/github.com/zenazn/goji$GOPATH/src/github.com/zenazn/goji$GOROOT/src/github.com/zenazn/goji

话虽如此,

go get
将继续安装到您中
$GOPATH/src
;并且,
goinstall
将安装
$GOPATH/bin
为二进制文件或
$GOPATH/pkg
程序包缓存。

因此,如何使用./vendor?!?!

呵呵,有了以上知识,这很简单:

mkdir -p $GOPATH/src/ou/vendor/github.com/zenazn/gojicp -r $GOPATH/src/github.com/zenazn/goji/ $GOPATH/src/ou/vendor/github.com/zenazn/goji

简而言之,要使用

github.com/zenazn/goji
供应商,您需要使用相同的完整路径将文件复制到供应商主管中。

现在,go build / install / run工具将看到并使用您的供应商文件夹。

无需手动复制所有内容的简便方法

与其查找并复制所有25个以上的供应商项目,管理其版本,更新其他项目等,不如使用 依赖管理工具 。那里有很多,有些谷歌搜索会指向您几个。

让我说说两个可以与vendor文件夹一起使用并且不会打败您的文件夹:

  • Godep
  • Govendor

简而言之,这些工具将检查您的

ou
代码,找到远程依赖项,并将其 您的目录复制
$GOPATH/src

您的
$GOPATH/src/ou/vendor
目录(实际上,运行它们时所在的当前目录)。

例如,假设您已经

$GOPATH/src/ou/
使用正常的依赖项GOPATH / src /
github安装了所有依赖项,并在项目中正常工作。您的项目将运行,并且您的测试将验证一切都与您所拥有的回购协议的确切版本一起使用。以Godep为例,您可以从项目的根文件夹运行此文件
$GOPATH/src/ou/

godep save ./...

这会将项目使用的所有依赖项复制到./vendor文件夹中。

Godep是迄今为止最受欢迎的。他们在Gopher Slack组中拥有自己的Slack频道。而且,这是我在团队中使用的一种。

Govendor是我阅读的另一种选择,具有不错的同步功能。我还没有用过。

过度使用依赖管理工具

这纯粹是观点,我敢肯定仇恨者会拒绝投票。但是,由于我需要完成有关该主题的博客文章,因此在这里我要提一提,大多数人过分担心Go中的依赖管理。

是的,有必要将存储库锁定到您所依赖的版本,以确保系统可以在生产环境中构建。是的,有必要确保对依赖项进行中断的方式不做任何重大更改。

绝对要使用依赖管理。

但是,实际上,简单项目的使用过多,它们会锁定大量依赖项…

您可能只需要锁定1个依赖项;否则,您需要最新版本的MySQL驱动程序和测试声明框架以进行错误修复。

在这里,

./vendor/
除了依赖项管理工具之外,使用文件夹确实可以发挥作用:您只需要复制需要锁定的存储库即可。

您可以有选择地选择一个行为不当的存储库,并将其放入./vendor/文件夹中。这样,您就告诉消费者:

嘿,这个版本需要推迟。其他所有的都很好,并且使用最新的并经常更新

go get -u ./...
;
但是,此版本使用较新的版本失败,因此请不要升级此版本库。

但是,如果使用依赖项管理工具全面保存所有依赖项,则基本上是在告诉用户:

供应商文件夹中20个中的一个或多个存储库可能有问题,也可能没有问题。您可能会或可能无法更新它们。您可能无法获得最新的MySQL驱动程序。我们根本不知道哪些可能会或可能不会导致问题,只是锁定了我运行时起作用的东西

godepsave
。是的,升级风险自负。

就个人而言,我已经遇到过几次。依赖项已进行了重大更改,并且有数十个依赖项。在/ vendor中只提供一个仓库,就可以使我们使用该版本的依赖关系,而

goget./...
对于所有其他仓库,它可以继续正常运行以获取最新版本。我们使用PSQL和MySQL及其他版本中的最新错误修复程序(这些程序有持续的修复程序!)等等来运行。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/369083.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号