Go1.17正式发布。这个版本的编译器采用了一种新的函数参数和结果传递方式。官方表示,此次改进使Go程序的性能提升了约5%,amd64平台的二进制包大小降低了约2%,未来计划支持更多平台。Go1.17在Windows上增加了对64位ARM架构的支持,允许Go开发者在更多设备上原生运行Go。此外,新版本还增加了修剪模块图的功能。官方对该功能的描述是,当Modules在其go.mod文件中指定go1.17或更高版本时,其模块图仅包括其他Go1.17模块的直接依赖,而不包括其所有横向依赖。这将有助于避免go.mod为其他不相关的依赖项下载或读取文件,从而节省日常开发的时间。在语言方面,Go1.17对语言特性进行了三项改进:支持从slice(切片)到数组指针unsafe.Add的转换:unsafe.Add(ptr,len)将len添加到ptr并返回更新后的指针unsafe.Pointer(uintptr(ptr)+uintptr(len))unsafe.Slice:对于*T类型的ptr表达式,unsafe.Slice(ptr,len)返回[]T类型的切片,其底层数组从ptr开始,其长度和容量是len
