Go 1.17改进编译器提升程序执行性能

Go团队发布了最新版本1.17,这个版本改进了编译器,在传递函数参数和结果,使用了新的方法,而这项改进使得Go程序的性能得以提高约5%,amd64平台的二进制文件大小减少2%,官方提到,未来版本还会支持更多的平台。另外,Go 1.17还增加对Windows上64位元Arm架构的支持,因此Go程序可以在更多的设备上原生运行。

这个新版本使用了修整过后的模块图(Module Graphs),在Go 1.17或是更高的版本,开发者于go.mod文件中指定模块,则模块图将会仅包含其他Go 1.17模块的直接相依项目,而非完整的递移相依(Transitive Dependency)项目,这将有助于避免下载或是读取go.mod文件,取用不相关的相依项目,可有效节省日常开发时间。

在语言功能上,Go 1.17有3个小改动,前两个是unsafe组件中的新函数,能使程序更容易遵循unsafe.Pointer规则,分别是unsafe.Add,允许安全地指标运算,还有unsafe.Slice,则能够安全地将指标转换成为切片(Slice)。第3个变化是语言类型转换规则的扩展,允许切片转换为数组指标,不过这项操作的前提是,切片在执行时至少要和数组一样大。