跳到主要内容
版本:2.9.x(Latest)

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 的性能优势。
  • text/templatehtml/template:
    • 空白符去除: 支持使用 {{--}} 语法来去除模板动作前后的空白符。

      {{23 -}} < {{- 45}} // 输出 "23<45"
    • Block 动作: 引入了 {{block "name" pipeline}}...{{end}} 动作,允许定义模板块并在后续重写,这对于定义基础布局模板非常有用。

  • sort:
    • 性能提升: sort 包的实现进行了重写,减少了约 10% 的 LessSwap 方法调用,提高了排序速度。但请注意,对于相等元素的排序顺序可能会发生变化(不稳定排序)。

参考资源

更多详细信息请参考官方发布说明:Go 1.6 Release Notes