Go 1.7 (2016-08-15)
Go 1.7 于 2016 年 8 月发布,引入了 context 包、SSA 编译器后端以及测试框架的重大改进。
主要变化
工具链
- Vendor: Vendor 目录支持现在默认启用,不再需要设置
GO15VENDOREXPERIMENT。
运行时
- SSA 编译器: x86-64 架构启用了全新的 SSA(静态单赋值)编译器后端,生成的代码更高效,二进制文件更小。
- 性能: 生成的代码通常运行速度提高 5-35%。
- 体积: 二进制文件大小通常减少 20-30%。
- 运行时: 即使在大量空闲 Goroutine 的情况下,GC 停顿时间也保持在低水平。
标准库
- Context 包:
golang.org/x/net/context被移入标准库context包,成为 Go 并发模式的核心组件。它定义了Context类型,用于在 API 边界和进程之间传递截止日期、取消信号和其他请求范围的值。- 集成:
net,net/http,os/exec等标准库包已更新以支持Context。 - http.Request:
http.Request增加了Context()和WithContext()方法。
- 集成:
- HTTP Tracing: 新增
net/http/httptrace包,用于跟踪 HTTP 请求的生命周期事件。用户可以注册回调函数来捕获如 DNS 解析、连接建立、TLS 握手等事件。 - 反射:
reflect.StructOf允许在运行时动态构造结构体类型。
测试框架
-
子测试与子基准测试:
testing包引入了Run方法,允许创建层级化的测试和基准测试。func TestFoo(t *testing.T) {
t.Run("SubTest1", func(t *testing.T) {
// ...
})
t.Run("SubTest2", func(t *testing.T) {
// ...
})
}这使得表驱动测试更加优雅,并且可以单独运行特定的子测试。
参考资源
更多详细信息请参考官方发布说明:Go 1.7 Release Notes