2023年2月11日·阅读约1分钟

Go 1.20引入了配置文件指导下的优化和语言增强的预览功能

Go 1.20是谷歌开发的开源语言的最新更新,包括配置文件引导优化(PGO)的预览和语言改进。PGO通过内联优化将性能提高了3%到4%,而其他优化正在进行中。

Go 1.20引入了配置文件指导下的优化和语言增强的预览功能

Go 1.20是谷歌创造的开源语言的生产版本,因其简单性、并发性和函数式编程特性而受到赞誉,它已经被推出,并为编译器提供了配置文件指导优化(PGO)的预览。Go 1.20可以从官方 go.dev网站 下载。

随着Go 1.20中PGO的预览,编译器工具链可以根据运行时配置文件信息进行特定的应用程序和工作负载优化。目前的编译器支持pprof CPU配置文件,可以使用runtime/pprof或net/http/pprof包收集。

PGO也被称为 "反馈导向优化",它是指将应用程序的代表性运行数据反馈给编译器,用于应用程序的下次构建。通过使用这些信息,编译器可以做出更明智的优化决定。一组有代表性的Go程序的基准测试表明,启用PGO内联优化可以将性能提高约3%到4%。未来的版本预计会引入更多的PGO优化。

伴随着PGO的引入,Go 1.20也给语言带来了四个变化。首先,在2021年的Go 1.17中引入的将片断转换为数组指针的能力,现在扩展到从片断到数组的转换。其次,不安全包包括三个新函数:SliceData,String,和StringData。这些函数提供了构建和解构切片和字符串值的完整能力,无论它们的具体表现形式如何。

第三,规范现在规定,结构值是一次一个字段的比较,考虑到字段在结构类型定义中出现的顺序,并在第一个不匹配处停止。第四,可比较的类型,如普通接口,可以满足可比较的约束,即使类型参数没有严格的可比较性。这使得受可比约束约束的类型参数可以用非严格可比的类型参数进行实例化,如接口类型或包含接口类型的复合类型。

除了这些语言上的变化,Go 1.20还带来了其他各种增强功能,比如支持程序的代码覆盖率配置文件收集,包括应用程序和集成测试。目录$GOROOT/pkg不再保留标准库的预编译包活动,这减少了Go的分发量,避免了C工具链对cgo包的倾斜。此外, go test -json 的实现得到了强化,以提高鲁棒性,而 go version -m 命令现在可以读取更广泛的Go二进制文件,包括Windows DLLs和没有执行权限的Linux二进制文件。

Go 1.20还带来了对RISC-V上的FreeBSD的实验性支持,并在没有C工具链的系统上默认禁用了cgo。然而,Go 1.20将是最后一个支持macOS 10.13 High Sierra和10.14 Mojave的版本,Go 1.21需要macOS 10.15 Catalina或更高版本。

No-code 像 AppMaster.io 这样的平台,可以从纳入Go 1.20这样的新优化语言中大大受益。通过为网络、移动和后端应用程序整合这样强大的工具,企业可以在生产力、用户体验和可扩展性方面实现重大改进。了解更多关于 no-code 和 应用程序开发low-code,以保持技术领先。

Easy to start
Create something amazing

Experiment with AppMaster with free plan.
When you will be ready you can choose the proper subscription.

Get Started