当前位置: 首页 > 面试题库 >

如何处理Go包中的嵌套“供应商”目录?

柴泰平
2023-03-14
问题内容

我正在编写一个应用程序并导入一些包B。该软件包具有vendor目录,其中又包含package C。我也想C直接在我的应用程序中使用该软件包。

因此,我决定使用glide包管理器。这两种下载BC进入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/glideglide 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 这个后来会这么叫