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

Go 1.5中的软件包版本管理

伍嘉
2023-03-14
问题内容

我得到我的手一起去脏,虽然我理解和欣赏的原理 简单 说离开是在建,我想把握原理背后放弃一个 内置的封装版本的方法 在他们的依赖,获取工具go get和该importhtml" target="_blank">声明

如果我正确理解,go get然后import从中获取软件包HEAD,他们将无法引用分支或标签。虽然有诸如gopkg.in之类的工具可以绕过此限制,但官方工具链:

  1. 强制开发人员为产品的主要(破坏性)版本创建单独的存储库。
  2. 如果在较新的版本中发现错误,则不允许消费者在次要版本或微型版本之间进行降级。

说实话,事情并不是那么容易,因为软件包版本控制需要一种策略来处理相互冲突的传递依赖关系,例如,X依赖于AB,每个依赖于的不同版本C

从Java的背景来看,这种限制确实带来了一些风险和问题,其中包括:

  1. 产品/包装的发展以及第三方部门公共API的破坏是不可避免的,因此版本控制必须是IMHO工具链中的一等公民。

  2. Git的回购每版 的政策是非常低效的:

    • 软件包的整体Git历史记录丢失或分散在存储库中(版本,反向端口等之间的合并)
    • 与传递依赖项的冲突仍然可能发生,并且由于语言或工具链强加了任何允许首先进行检测的语义,因此无法检测到。
    • 鉴于以下原因,企业采用可能会受到阻碍,并且开发团队可能会回避使用该语言

    • 始终拖入HEAD意味着他们无法控制或冻结他们的第三方部门,从而导致潜在的不可预测的最终产品。

    • 可能缺乏人力来保持其产品不断更新并在上游进行测试HEAD(世界上并非每个公司都是Google :))。

虽然我确实知道,通过持续集成可以(并且必须)减轻后一种风险,但它并不能解决问题的根本原因。

我缺少什么信息?在人力有限的企业中部署Go时,如何处理软件包的上游更改?


问题答案:

这是正在解决由vendoring这是围棋1.5作为一个实验性功能的一部分,它可以在合格命令与运行启用GO15VENDOREXPERIMENT=1在其环境中,并会在Go
1.6“全”功能。另请参阅供应商目录。

可以在此处找到导致Go 1.5 Vedor实验的原始讨论。

供应的本质是创建一个名为的文件夹vendor,并放置代码所依赖的软件包的确切版本。vendor文件夹内的代码只能由以父文件夹为根的目录树中的代码导入vendor,并且您可以vendor使用导入路径vendorworkspace/src文件包导入文件,就好像是文件夹一样(也就是说,导入路径会省略前缀为并包括vendor元素)。

例:

/home/user/goworkspace/
    src/
        mymath/
            mymath.go
            vendor/
                github.com/somebob/math
                    math.go

在此示例中,github.com/somebob/math是包使用的外部mymath包(来自mymath.go)。可以从以下方式使用mymath.go它:

import "github.com/somebob/math"

(不是那样import mymath/vendor/github.com/somebob/math不好。)



 类似资料:
  • 软件包的版本号是个奇怪的东西。它们看起来像十进制的数字,但它们不是。 例如,一个版本号通常的形式为 2.6.4。如果你需要比较两个版本号, 不能做简单的字符串比较,因为 2.6.4 会比 2.6.12 大;也不能进行数字比较, 因为它们不是有效地数字。 Puppet 的 versioncmp 函数会帮我们解决这个问题。 若你给它传递两个版本号,它会比较它们,并返回一个值,指出谁是更大的: ve

  • 安装 要在集群主机上安装 Ceph 软件包,在管理主机上打开命令行并执行下列命令: ceph-deploy install {hostname [hostname] ...} 没提供额外选项的话 ceph-deploy 默认会把最新稳定版安装到集群主机,要指定某个软件包可以用下列参数: --release <code-name> --testing --dev <branch-or-tag> 例如

  • 我想将以新的swift包管理器格式编写的swift代码编译成高度优化的二进制代码。这在当前使用swiftc-O somefile时是可能的。swift

  • 有时你或许不想升级某些软件包,这时我们可“pin”住这些软件包,使它们不能被升级。我们可很容易实现该功能,只要编辑/etc/apt/preferences配置文件。该文件的格式如下: Package: <package> Pin: <pin definition> Pin-Priori

  • apt-show-versions可显示已安装软件包的版本,它提供了一种安全的方法从混合版本环境中升级指定版本的软件包。如以下命令只升级unstable的软件包: # apt-get install `apt-show-versions -u -b | grep unstable`

  • 问题内容: 我想使用conda在当前的活动环境中安装“ rope”软件包。当前,以下“绳索”版本可用: 我想安装以下软件: 我已经尝试过各种“ conda install”的排列方式,因为它们都不正确,所以这里不再列出。 我也不确定 py35_0 是什么(我假设这是针对其构建软件包的python版本?),我也不知道’defaults’是什么意思? 问题答案: 没有适用于的版本。指包装。的最高可用版