我得到我的手一起去脏,虽然我理解和欣赏的原理 简单 说离开是在建,我想把握原理背后放弃一个 内置的封装版本的方法 在他们的依赖,获取工具go get和该import声明。
go get
import
如果我正确理解,go get然后import从中获取软件包HEAD,他们将无法引用分支或标签。虽然有诸如gopkg.in之类的工具可以绕过此限制,但官方工具链:
HEAD
说实话,事情并不是那么容易,因为软件包版本控制需要一种策略来处理相互冲突的传递依赖关系,例如,X依赖于A和B,每个依赖于的不同版本C。
X
A
B
C
从Java的背景来看,这种限制确实带来了一些风险和问题,其中包括:
产品/包装的发展以及第三方部门公共API的破坏是不可避免的,因此版本控制必须是IMHO工具链中的一等公民。
在 Git的回购每版 的政策是非常低效的:
鉴于以下原因,企业采用可能会受到阻碍,并且开发团队可能会回避使用该语言:
始终拖入HEAD意味着他们无法控制或冻结他们的第三方部门,从而导致潜在的不可预测的最终产品。
虽然我确实知道,通过持续集成可以(并且必须)减轻后一种风险,但它并不能解决问题的根本原因。
我缺少什么信息?在人力有限的企业中部署Go时,如何处理软件包的上游更改?
这是正在解决由vendoring这是围棋1.5作为一个实验性功能的一部分,它可以在合格命令与运行启用GO15VENDOREXPERIMENT=1在其环境中,并会在Go 1.6“全”功能。另请参阅供应商目录。
GO15VENDOREXPERIMENT=1
可以在此处找到导致Go 1.5 Vedor实验的原始讨论。
供应的本质是创建一个名为的文件夹vendor,并放置代码所依赖的软件包的确切版本。vendor文件夹内的代码只能由以父文件夹为根的目录树中的代码导入vendor,并且您可以vendor使用导入路径vendor从workspace/src文件包导入文件,就好像是文件夹一样(也就是说,导入路径会省略前缀为并包括vendor元素)。
vendor
workspace/src
例:
/home/user/goworkspace/ src/ mymath/ mymath.go vendor/ github.com/somebob/math math.go
在此示例中,github.com/somebob/math是包使用的外部mymath包(来自mymath.go)。可以从以下方式使用mymath.go它:
github.com/somebob/math
mymath
mymath.go
import "github.com/somebob/math"
(不是那样import mymath/vendor/github.com/somebob/math不好。)
import mymath/vendor/github.com/somebob/math