Go 博客
Go 1.6 发布
今天我们发布了 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 并发地读取或写入该映射。如果运行时检测到此情况,它将打印诊断信息并崩溃程序。了解此问题的最佳方法是在竞态检测器下运行它,该检测器将更可靠地识别竞态并提供更多详细信息。
运行时还更改了打印程序结束时 panic 的方式。现在它只打印发生 panic 的 goroutine 的堆栈,而不是所有现有 goroutine 的堆栈。此行为可以使用GOTRACEBACK 环境变量或调用debug.SetTraceback 函数进行配置。
cgo 用户应注意 Go 和 C 代码之间共享指针规则的重大变化。这些规则旨在确保此类 C 代码可以与 Go 的垃圾回收器共存,并在程序执行期间进行检查,因此代码可能需要更改以避免崩溃。详细信息请参阅发布说明和cgo 文档。
编译器、链接器和 go 命令有一个新的 -msan
标志,类似于 -race
,仅在 linux/amd64 上可用,它支持与 Clang MemorySanitizer 进行交互。这对于测试包含可疑 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 中的语言和区域匹配
博客索引