Go 1.6 (2016-02-17)
Go 1.6 于 2016 年 2 月发布,默认启用了 HTTP/2 支持,并增强了模板功能和运行时检测。
主要变化
工具链
- Vendor: Vendor 目录的支持现在默认启用。
GO15VENDOREXPERIMENT环境变量默认为 1。Go 1.6 是最后一个允许通过设置该变量为 0 来禁用 Vendor 支持的版本。 - Cgo: 明确并强制执行了 Go 指针传递给 C 代码的规则。只要 C 代码不保留指向 Go 分配内存的指针,并且该内存本身不包含指向其他 Go 分配内存的指针,Go 代码就可以将指向 Go 分配内存的指针传递给 C。违反这些规则会导致运行时崩溃。
运行时
- Map 并发检测: 运行时增加了对 Map 并发误用的轻量级检测。如果检测到并发写操作,程序会崩溃并打印错误信息。这有助于发现潜在的数据竞争问题。
标准库
net/http:- HTTP/2 支持:
net/http包现在默认支持 HTTP/2 协议(通过 HTTPS)。当使用 HTTPS 时,Go 客户端和服务器会自动协商并使用 HTTP/2。现有的 HTTP 程序无需修改代码即可享受 HTTP/2 的性能优势。
- HTTP/2 支持:
text/template和html/template:-
空白符去除: 支持使用
{{-和-}}语法来去除模板动作前后的空白符。{{23 -}} < {{- 45}} // 输出 "23<45" -
Block 动作: 引入了
{{block "name" pipeline}}...{{end}}动作,允许定义模板块并在后续重写,这对于定义基础布局模板非常有用。
-
sort:- 性能提升:
sort包的实现进行了重写,减少了约 10% 的Less和Swap方法调用,提高了排序速度。但请注意,对于相等元素的排序顺序可能会发生变化(不稳定排序)。
- 性能提升:
参考资源
更多详细信息请参考官方发布说明:Go 1.6 Release Notes