APP下载

Go套件版本控制头很大?试试语意输入版本控制的vgo

消息来源:baojiabao.com 作者: 发布时间:2024-05-17

报价宝综合消息Go套件版本控制头很大?试试语意输入版本控制的vgo

Google工程师Russ Cox在在官网向社群征询GO套件版本控制的意见,提出语意输入版本控制(Semantic Import Versioning)的想法,并实作了vgo(Versioned Go)放在GitHub上,希望社群成员在使用后能给予意见回馈。

Go在套件上的版本控制一直没有较佳的解决方案,不少的先进开发语言,都有其社群惯用的套件管理工具,不论是Java的Maven,或是Rust的Cargo,甚至是Node的Npm,虽然目前Go官方有释出Dep来填补这个功能缺口,但是仍不够理想,Russ Cox认为,Dep有其致命的缺点,便是缺乏对大型程式的支援。

由Go重要社群成员Sam Boyer带领的团队,参考Rust的Cargo后,着手开发官方的套件管理工具Dep,Russ Cox表示,随着工具的发展,他们认知到一开始的计划,有必要为往后相容问题做出修正,使用语意输入版本控制是他们目前想到可行的方法。

套件相容问题必须考虑Go语言的两条套件规则,第一为输入的相容性原则(Import Compatibility Rule),当旧套件与新套件使用相同的输入路径,两者就必须相容。第二是输入的唯一性原则(Import Uniqueness Rule),不同套件必须使用不同的输入路径。他们认知到,使用语意版本控制而不使用语意输入版本控制,需要放弃部分程式码升级或是输入唯一性,在两规则中二择一。

Russ Cox表示,Cargo的作法便是放弃输入唯一性以达到部分程式码升级,而原本Dep的作法则是放弃部分程式码升级,确保输入的唯一性,但这同时也表示放弃建构大型程式的可能性。他认为,Cargo的作法是正确的做法,而Dep也没有错,因为受限于Go先天的限制。

因此为了不在两者中选择,使用语意输入版本控制是必要的,同时在安装的路径上注明版本号,并且使用语意版本的表达方式,列出主版本号、小版本号以及补丁版本号。

虽然Dep看似可以满足现在Go套件的版本控制需求,但是Russ Cox表示,他仍然对于缺乏对大型程式支援感到担心,因此着手建立vgo实现语意输入版本控制的想法。他认为,这件事将关乎Go语言未来的发展,并希望社群可以持续的回馈意见,而他们也会继续在会议中讨论这件事。

2018-03-28 02:31:00

相关文章