Go 1.6 相比 Go 1.5 有哪些值得注意的改动?
本系列旨在梳理 Go 的 release notes 与发展史,来更加深入地理解 Go 语言设计的思路。
/doc/go1.6
Go 1.6 值得关注的改动:
- 平台支持:新增了对
linux/mips64
、linux/mips64le
和android/386
的实验性支持;FreeBSD 默认 C 编译器改为 clang;linux/ppc64le
现支持 cgo 外部链接。 - Cgo 交互:明确了 Go 指针传递给 C 代码的规则并增加了运行时检查(可通过
GODEBUG=cgocheck=0
禁用);引入了与 Go 的complex
类型区分开的Cplexfloat
和Cplexdouble
类型。 - 编译器工具链:内部重写了语法分析器(parser);新增
-msan
标志用于集成 Clang MemorySanitizer;扩展了对c-shared
、shared
和 位置无关可执行文件(Position Independent Executable, PIE)等构建模式的支持;再次提醒-X
标志的旧语法将在 Go 1.7 中移除。 - HTTP/2 支持:
net/http
包为 HTTPS 请求自动启用了 HTTP/2 支持,无需修改代码;可通过Transport.TLSNextProto
(客户端)或Server.TLSNextProto
(服务端)禁用。 - 运行时:增加了对
map
并发误用的轻量级检测(检测到即崩溃);程序崩溃(panic)时默认仅打印当前 goroutine 的 堆栈(stack),可通过GOTRACEBACK=all
或debug.SetTraceback("all")
查看全部;Windows 下不再强制修改系统定时器精度;改变了-buildmode=c-archive/c-shared
模式下的信号处理行为。