首页 / 百科
Go开发团队正式宣布推出Go 1.11版本
2018-08-27 00:00:00
Go开发团队正式宣布推出Go 1.11版本。新版本在工具链、运行时和库等方面有很多变化和改进,特别是增加了模块支持和WebAssembly支持两个新特性。
今天,Go开发团队宣布推出Go 1.11正式版。
下载地址:https://golang.org/dl
这距离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端口做出的贡献,以及感谢为这个新版本做出贡献的所有人,包括编写代码,提交错误,提供反馈和/或测试测试版和发布候选版本。如果你在使用中发现任何问题,请提交问题。
最新内容
手机 |
相关内容
氮化镓芯片到底是如何做的呢?
氮化镓芯片到底是如何做的呢?,做的,芯片,可靠性,能和,封装,步骤,氮化镓(GaN)芯片是一种基于氮化镓材料制造的XC3S200A-4VQG100C微电子多用途可回收纳米片面世,可用于电子
多用途可回收纳米片面世,可用于电子、能源存储、健康和安全等领域,能源,健康,传感器,结构,用于,芯片,近年来,纳米技术的快速发展给各分离式光电液位传感器与电容式液位
分离式光电液位传感器与电容式液位传感器对比,传感器,值会,温度,检测,测量,介电常数,分离式光电液位传感器与电容式液位传感器是常梦芯科技独立北斗芯片模块MXT2721
梦芯科技独立北斗芯片模块MXT2721隆重发布,芯片,北斗,模块,能力,导航,支持,梦芯科技是一家致力于研发和生产半导体产品的高科技公司超声波声音:音频先锋xMEMS的新型硅
超声波声音:音频先锋xMEMS的新型硅扬声器,先锋,音频,扬声器,小型,清晰度,高频,音频先锋是一家领先的音频技术公司,最近推出了一种全新什么是带阻三极管,带阻三极管的基本
什么是带阻三极管,带阻三极管的基本结构、工作原理、电阻比率、常用型号、应用、检测、操作规程及发展历程,三极管,检测,工作原理,什么是高压接触器,高压接触器的组成
什么是高压接触器,高压接触器的组成、特点、原理、分类、常见故障及预防措施,高压,分类,闭合,用于,操作,损坏,AD694ARZ高压接触器是什么是射流继电器,射流继电器的基本
什么是射流继电器,射流继电器的基本结构、技术参数、工作原理、负载分类、如何选用、操作规程及发展历程,继电器,工作原理,分类,负