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