快捷搜索:

您的位置:澳门新葡4473网站 > 澳门新葡4473网站 > Go 1.11 将支持的 Go module:解决包依赖管理问题

Go 1.11 将支持的 Go module:解决包依赖管理问题

发布时间:2020-01-09 17:57编辑:澳门新葡4473网站浏览(95)

    Go 1.11 预计将于2018年8月发布,最大的变化莫过于将为称作"modules"的新概念添加实验性支持。那么这对 Go 开发者意味着什么?

    图片 1

    Go 语言从2007年诞生至今,已经发展和演化十多年了。这十多年来,Go 取得了巨大的成就,先后于2009年和2016年当选 TIOBE 年度最佳编程语言,并在全世界范围内拥有数量庞大的拥趸。当然 Go 语言也不是完美的 —— 这些年来 Go 在“包依赖管理”和“缺少泛型”两个方面就饱受诟病,它们也是 Go 开发者最希望 Go 核心开发团队重点完善的两个方面。

    Go语言是Google开发的新型编程语言,将动态语言易于编写的特性和静态语言的高效性相结合,具备良好的易用性和极佳的执行效率。目前该语言已经发布了1.2正式版本。Go语言开发者Russ Cox近日透露,在Go 1.3版本之后,该语言的编译器将会使用Go语言重写。目前的Go编译器目前Go编译器gc基于C语言,是从Plan 9的C编译器衍生出来的,其中保持了原有的汇编程序、C编译器和链接器,而部分针对Go的编译器使用C语言进行了重写。为何要采用Go语言实现Russ Cox指出,采用Go语言来实现编译器相比C语言的优势在于:编写正确的Go代码要比编写正确的C代码容易调试不正确的Go代码要比调试不正确的C代码容易Go编译器必然需要对Go有个很好的了解,而使用C语言实现则增加了一个不必要的二次需求与C相比,Go语言对并行程序执行得更好对于模块化、自动重写、单元测试以及分析,Go比C有更好的标准支持使用Go比使用C更加有趣计划Russ Cox表示,将编译器从C实现转变为Go实现的过程,主要是通过自动翻译程序来进行。这一过程将分阶段进行:第1阶段:开发和调试翻译程序。第2阶段:使用翻译程序将编译器从C转换成Go,并删除部分C语言副本。该阶段可能会在Go 1.3版本中实现,可能仍会需要一些C代码。第3阶段:使用一些工具将编译器分割成包,并清理部分代码、添加文档、添加集成测试等。这个阶段将在Go 1.4中实现,会将编译器彻底转换成为一个Go程序。第4阶段:通过标准的分析和测量技术对编译器的内存和CPU占用率进行优化,可能会引入并行处理。该阶段将在Go 1.4中实现,部分特性可能会在Go 1.5中实现。第5阶段:使用最新版本的Go解析器和类型替换编译器前端。舍弃的方案对于为何不从头编写一个新的编译器,Russ Cox表示,从头编写是一个愚蠢的行为,这意味着要抛弃之前很多人很多年以来的工作成果。Go语言开发团队还尝试了手动将C代码翻译为Go代码,但是在翻译了几个小型的C/C++程序之后,他们发现这种方式比较繁琐,且容易出错,而且错误都非常隐蔽,不易发现。因此,他们决定首先开发出一个自动编译器,通过这种方式,出现的错误将会是一致的,容易查找。详细信息:Go 1.3+ Compiler Overhaul

    今年 2018 年初,Go 核心 Team 的技术领导人,也是 Go Team 最早期成员之一的 Russ Cox 在个人博客上连续发表了七篇文章 ,系统阐述了 Go team 解决“包依赖管理”的技术方案: vgo。vgo 的主要思路包括:Semantic Import Versioning、Minimal Version Selection 、引入 Go module 等。这七篇文章的发布引发了 Go 社区激烈的争论,尤其是MVS(最小版本选择)与目前主流的依赖版本选择方法的相悖让很多传统 Go 包管理工具的维护者“不满”,尤其是“准官方工具”:dep。vgo方案的提出也意味着dep项目的生命周期即将进入尾声。

    5月份,Russ Cox 的 Proposal “cmd/go: add package version support to Go toolchain” 被 accepted,上周 Russ Cox 将 vgo 的代码 merge 到 Go 主干 ,并将这套机制正式命名为“go modules”。由于 vgo 项目本身就是一个实验原型,merge 到主干后, vgo 这个术语以及 vgo 项目的使命也就就此结束了 。后续 Go modules 机制将直接在 Go 主干上继续演化。

    Go modules 刚刚 merge 到 Go trunk 中,问题还会有很多,不过这是 Go team 在解决包依赖管理方面的一次勇敢尝试。无论如何,对 Go 语言来说都是一个好事。merge 后很多 gopher 也提出了诸多问题,可以在这里查看。如果你也遇到了 go modules 方面的问题,可以在 Go 的 GitHub 仓库中提 issue,帮助 Go team 尽快更好地完善 Go 1.11 的 Go modules 机制。

    部分内容来自:https://www.colabug.com

    本文由澳门新葡4473网站发布于澳门新葡4473网站,转载请注明出处:Go 1.11 将支持的 Go module:解决包依赖管理问题

    关键词:

上一篇:Linux系统调用原理

下一篇:没有了