我正在编写一个应用程序并导入一些包B
。该软件包具有vendor
目录,其中又包含package C
。我也想C
直接在我的应用程序中使用该软件包。
因此,我决定使用glide
包管理器。这两种下载B
和C
进入myapp/vendor
目录,但保持myapp/vendor/B/vendor/C
里面。因此,当我构建自己的应用程序时,它会使用两个不同的C版本(也使用myapp/vendor/C
)来构建。
如何避免呢?
1)要么,有可以处理该问题的软件包管理器?govend
似乎有其--prune
论点,但它不尊重这些C
软件包的版本。
2)或者,如何glide
正确处理嵌套vendor
目录?
编辑
我的例子是https://github.com/orloffm/flat
。它使用cat
和-间接- toy
包。cat
有一些
较旧的供应商版本 ,toy
并已提交到存储库中。我这样做glide create && glide install
并最终得到:
.
├── flat.go
├── glide.lock
├── glide.yaml
└── vendor
└── github.com
└── orloffm
├── cat
│ ├── cat.go
│ ├── vendor
│ │ └── github.com
│ │ └── orloffm
│ │ └── toy
│ │ └── toy.go
│ └── vendor.yml
└── toy
└── toy.go
我不想使用嵌套vendor
目录toy
。
flat
通过进行以下更改,我能够安装和运行您的程序(还向您发送了PR
https://github.com/orloffm/flat/pull/1):
1)flat.go由于以下原因需要导入“ github.com/orloffm/toy”- new(toy.RubberToy)
否则无法编译
2)添加glide.yaml
同时列出“ cat”和“ toy”库作为依赖项的文件:
package: github.com/orloffm/flat
import:
- package: github.com/orloffm/cat
- package: github.com/orloffm/toy
3)运行glide install --strip-vcs --strip-vendor
(或等效的快捷方式glide install -s -v
)以安装软件包并删除嵌套vendor/
目录(我使用的滑行版本为0.11.0-dev,安装了go get -u github.com/Masterminds/glide
;glide install --help
显示了该--strip-vendor
选项)。
4)GOBIN = $ PWD去安装&& ./flat产生
Cat pushes the toy.
The toy makes a very loud noise.
我认为最好的方法是 不要 将vendor
目录包含在您的 库中
-这样会弄乱事情,并使库用户的生活更加困难(例如,需要记住要使用其他选项来进行glide
)。让那些库的“客户端”(程序package main
包)供应所有依赖项(包括传递性依赖项),或者在诸如之类的配置中指定它们,glide.yaml
并让工具(glide)正确地获取并安装它们。
问题内容: 我已经找到了尽可能多的文档和StackOverflow文章,但是使用Go 1.6中的新供应商功能无法导入。 这是我与Goji一起测试的示例项目。目录结构如下: 并且,项目中的唯一文件是这样的: 我的环境变量如下: 我尝试了最简单的构建命令,但是没有运气: 我也尝试用: …无济于事。我完全想念什么吗?任何建议表示赞赏。 问题答案: 我建议您阅读https://golang.org/doc
问题内容: 我的gopath是,跟随如下: 现在,我使用,然后变为: 这是: 那么,我应该使用什么命令?为什么没用?我的go版本是1.6.2。 问题答案: 借助Go1.6,您可以在阅读时内置供应商。这是什么意思?只有一件事要牢记: 当使用诸如或的工具时,他们首先检查依赖项是否位于中。如果是这样,请使用它。如果不是,请还原到该目录。 Go 1.6中的实际“查找路径”依次为: 话虽如此,将继续安装到您
问题内容: 我正在将现有的应用程序移植到Flux,并且对一个主题有些困惑。假设我有几个API端点,它们返回两级或三级嵌套对象。 例如,可能返回架构的JSON响应 如您所见,有各种各样的用户处于不同的嵌套级别: 如果我想在获取文章时随时使用新数据进行更新,则必须编写一个怪异的方法来检查文章API响应上的所有嵌套实体。而且,将存在很多重复,因为还有其他API端点具有不同的架构,有时文章嵌入在用户内部(
问题内容: 我的项目文件夹包含: 我想在所有测试文件上运行,例如,除供应商软件包中的测试文件外的文件。我最接近成功的是,但其中包括供应商测试文件。 我在文档中看到您可以将正则表达式传递给option,但是我无法正常工作。例如我尝试过,但是我得到了一堆。 最好的方法是什么? 问题答案: 该模式仅与测试标识符(而非文件名)匹配;原则上,您可以执行以下操作: 但是当您不得不将所有测试功能名称添加到您可能
我想创建一个函数来返回成功操作的一系列期货的结果。我遇到的问题是返回类型为Unit,并且未来函数正在完成,而无需等待嵌套的未来序列完成。我尝试过不使用on完成函数,而是使用map或平面图,但没有成功。我还想避免使用wait 这个后来会这么叫