Go 博客

Go 1.6 发布

Andrew Gerrand
2016年2月17日

今天我们发布了Go 1.6 版本,这是 Go 的第七个主要稳定版本。您现在可以从下载页面获取它。尽管六个月前的 Go 1.5 版本包含了重大的实现更改,但此版本的变化更小。

最重要的变化是net/http 包中对HTTP/2的支持。HTTP/2 是一种新的协议,是 HTTP 的后续版本,已经得到了浏览器供应商和主要网站的广泛采用。在 Go 1.6 中,使用 HTTPS 时,服务器和客户端都默认启用对 HTTP/2 的支持,从而将该新协议的优势带到各种 Go 项目中,例如流行的Caddy Web 服务器

模板包学习了一些新技巧,包括支持修剪模板操作周围的空格以生成更简洁的模板输出,以及引入了可用于创建基于其他模板的模板的{{block}} 操作。一个新的模板示例程序演示了这些新功能。

Go 1.5 引入了实验性支持,用于通过环境变量启用的“vendor”目录。在 Go 1.6 中,此功能现在默认启用。包含名为“vendor”的目录(未根据新功能使用)的源代码树将需要更改以避免构建中断(最简单的解决方法是重命名该目录)。

运行时添加了轻量级、尽力而为的检测,用于检测对映射的并发错误使用。与往常一样,如果一个 goroutine 正在写入映射,则任何其他 goroutine 都不得同时读取或写入该映射。如果运行时检测到此情况,它将打印诊断信息并使程序崩溃。了解有关此问题的更多信息的最佳方法是在竞争检测器下运行它,它将更可靠地识别竞争并提供更多详细信息。

运行时还更改了打印程序结束恐慌的方式。它现在仅打印发生恐慌的 goroutine 的堆栈,而不是所有现有的 goroutine。可以使用GOTRACEBACK环境变量或通过调用debug.SetTraceback函数来配置此行为。

cgo 用户应注意 Go 和 C 代码之间共享指针的规则发生了重大变化。这些规则旨在确保此类 C 代码可以与 Go 的垃圾回收器共存,并在程序执行期间进行检查,因此代码可能需要更改以避免崩溃。有关详细信息,请参阅发行说明cgo 文档

编译器、链接器和 go 命令具有一个新的-msan标志,类似于-race,并且仅在 linux/amd64 上可用,它启用了与Clang 内存清理程序的互操作。这对于测试包含可疑 C 或 C++ 代码的程序很有用。在使用新的指针规则测试 cgo 代码时,您可能希望尝试一下。

使用 Go 1.6 构建的 Go 程序的性能与使用 Go 1.5 构建的程序的性能相似。垃圾回收暂停甚至低于 Go 1.5,但这对于使用大量内存的程序尤其明显。关于编译器工具链的性能,构建时间应与 Go 1.5 的构建时间相似。

sort.Sort内部的算法得到了改进,运行速度提高了约 10%,但更改可能会破坏期望相等但可区分的元素的特定排序顺序的程序。此类程序应改进其Less方法以指示所需的排序顺序,或者使用sort.Stable以保留相等值的输入顺序。

当然,还有许多其他新增功能、改进和修复。您可以在全面的发行说明中找到它们。

为了庆祝此次发布,世界各地的 Go 用户组将于 2 月 17 日举行发布派对。在线上,Go 贡献者将在接下来的 24 小时内在golang subreddit上举办问答环节。如果您对该项目、发布或 Go 本身有任何疑问,请加入讨论

感谢所有为此次发布做出贡献的人。祝您编程愉快。

下一篇文章:Go 1.7 发布
上一篇文章:Go 中的语言和区域设置匹配
博客索引