Go 1.10 改进了工具链和性能

  • Sergio De Simone
  • 盖磊

2018 年 3 月 4 日

话题:开源Google语言 & 开发

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

Go 最新的 1.10 版并未在语言层面做出任何重大变更,而是在工具链、Go 运行时和标准库上做了一系列的改进。

Go 1.10 中的一个重大改进是缓存了构建结果,同时可以更好地检测过期软件包。具体而言,Go 不再依赖于文件的修改时间去判断该文件是否需要做重编译,而是根据文件的内容、构建标志以及存储在编译后软件包中的元数据做出重编译的决策。这样,没有必要再指定原先用于强制重构建的“-a”标识。缓存构建包意在进一步优化构建时间,特别是当开发人员在一组构建标识或源代码版本和分支之间来回切换时。

与缓存构建类似,现在go test命令也对成功测试的结果做缓存。一旦go test检测到当前测试的可执行文件和命令行参数与上一次运行测试中所使用的匹配,那么命令将只输出缓存的测试结果。

通过允许嵌套调用LockOSThreadUnlockOSThread,Go 1.10 运行时已可安全操作Linux 命名空间。这意味着 Goroutines 现在可用于容器,排除了一些影响先前 Go 版本的障碍

此外,通过在更长时间跨度上使用更小部分的 CPU,Go 运行时改进了垃圾回收的分配延迟,同时不会对整体 CPU 消耗产生影响。

还应指出的是,Go 的性能受益于垃圾回收的改进、标准库的优化,以及更好的代码生成。

根据 Go 团队的说法,主版本号如预期一样并没有发生变化,Go 1.10 可与大部分使用先前 1.x 版本编译的程序保持兼容。

在 Go 1.10 中还引入了大量的改进,在此无法一一列举。完整细节可查看官方的发行说明

查看英文原文: Go Language 1.10 Improves Toolchain and Performance

开源Google语言 & 开发