0 卖盘信息
BOM询价
您现在的位置: 首页 > 电子资讯 >基础知识 > Go开发团队正式宣布推出Go 1.11版本

Go开发团队正式宣布推出Go 1.11版本

来源: 维库电子网
2019-11-28
类别:基础知识
eye 51
文章创建人 拍明

原标题:Go开发团队正式宣布推出Go 1.11版本

  Go开发团队正式宣布推出Go 1.11版本。新版本在工具链、运行时和库等方面有很多变化和改进,特别是增加了模块支持和WebAssembly支持两个新特性。

  今天,Go开发团队宣布推出Go 1.11正式版。

  这距离Go 1.10的发布已经过去六个月。

  新版本在工具链、运行时和库等方面有很多变化和改进,兼容性方面也依然会兼容旧版本。此外,新版本增加了两个最激动人心的新特性:对模块(modules)和WebAssembly的支持。

  模块、软件包版本控制和依赖关系管理

  Go 1.11版本增加了对“模块”(modules)这个新概念的初步支持,这是GOPATH的替代方案,集成了对版本控制和软件包分发的支持。

  使用modules,开发人员将不再局限于在GOPATH中工作,版本依赖性信息是显式而且轻量级的,并且构建项更具可靠性和可重复性。

  模块支持功能目前仍处于实验性阶段,根据Go 1.11用户的反馈,细节可能会发生变化,Go开发团队也在计划增加更多工具。模块支持可能仍有一些可能影响使用的问题,因此请充分利用问题跟踪器进行反馈或查阅解决方案。

  WebAssembly

  Go 1.11还为WebAssembly(js/wasm)添加了一个实验端口。这允许程序员将Go程序编译为与四种主流Web浏览器兼容的二进制格式。

  目前,Go程序编译为一个WebAssembly模块,该模块包括Go runtime,用于goroutine scheduling,garbage collection,maps等。因此,其大小至少约为2 MB,或压缩为500 KB。Go程序可以使用新的实验性syscall/js包调用JavaScript。二进制大小和与其他语言的互操作还不是优先级的,但可能在将来的版本中解决。

  由于添加了新的GOOS值“js”和GOARCH值“wasm”,Go工具现在将忽略名为* _js.go或* _wasm.go的Go文件,除非使用了那些GOOS/GOARCH值。如果你的现有文件名与这些模式一致,则需要重命名它们。

  你可以在webassembly.org上阅读有关WebAssembly(缩写为“Wasm”)的更多信息,并查看这个Wiki页面,了解如何开始使用Wasm with Go。

  其他工具

  导入路径限制

  由于 Go 模块支持在命令行操作中为符号@指定了特殊含义 ,因此该Go命令现在不允许使用包含@符号的导入路径。go get从未允许这种导入路径,因此该限制只会影响用户通过其他方式构建自定义 GOPATH 树。

  Package 加载

  新的软件包golang.org/x/tools/go/packages提供了一个简单的API来定位和加载Go源代码包。虽然它还不是标准库的一部分,但对于许多任务,它有效地替代了go/build包,后者的API无法完全支持模块。这个AIP支持构建分析工具,这些工具与Bazel和Buck等替代构建系统同样有效。

  构建缓存要求

  Go 1.11 将是支持设置环境变量GOCACHE=off以禁用构建缓存的最后一个版本。从 Go 1.12 开始,将需要构建缓存,作为消除$GOPATH/pkg的步骤。

  编译器工具链

  默认情况下,现在更多函数可以进行内联,包括调用panic的函数。编译器工具链现在支持行指令中的列信息。引入了新的包导出数据格式。

  汇编

  汇编程序amd64现在接受 AVX512 指令。

  调试

  编译器现在可以为优化的二进制文件生成更精确的调试信息,包括可变位置信息、行号和断点位置。这将使调试没有-N -l编译的二进制文件成为可能。Go 1.11添加了在调试器中调用Go函数的实验性支持。

  测试

  从Go 1.10开始,Go test命令在被测试的包上运行Go vet,以便在运行测试之前识别问题。因为vet在运行前用go/type检查代码,所以不检查类型的测试将会失败。

  Vet

  go vet命令现在在分析包未进行类型检查时会报告致命错误。一起,类型检查错误只会导致打印警告,并以状态1退出vet。

  跟踪

  使用新的runtime/trace包的用户注释API,用户可以在执行跟踪中记录应用程序级别的信息,并创建相关的goroutines组。go tool trace这个命令在跟踪视图和新用户任务/区域分析页面中显示此信息。

  Runtime

  runtime现在使用稀疏堆布局,因此不再限制Go堆的大小(以前的限制是512GiB)。这也解决了使用-race编译的混合Go/C二进制文件或二进制文件中的“address space conflict”故障。

  在macOS和iOS上,运行时现在使用libSystem.so,而不是直接调用内核。这应该使Go二进制文件与未来版本的macOS和iOS更加兼容。syscall package仍然可以进行直接的系统调用。

  此外,Go 1.11正式版对核心库也有更改,不过所有更改都比较小。具体请见Release Notes。

  Google 的 Go 工程师 Andrew Bonventre 在博客中特别感谢了Richard Musiol为WebAssembly端口做出的贡献,以及感谢为这个新版本做出贡献的所有人,包括编写代码,提交错误,提供反馈和/或测试测试版和发布候选版本。如果你在使用中发现任何问题,请提交问题。


责任编辑:

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

标签: 编译器

相关资讯