导读:Go语言的最新版本1.21.0发布了,一起来看看有什么新鲜和先进的。
Go 1.21.0 昨天在其研发团队官方网站和Google小组上宣布正式发布了。
目前,我在mac上brew的安装包版本仍为1.20,我们可以用下载安装程序的方法来更新。
更新与特性总结
此版本大部分变化集中在工具链、运行时和库的实现。与往常一样,该版本保持了 Go 1 的兼容性承诺;事实上,Go 1.21 改进了这一承诺。开发团队希望几乎所有 Go 程序都能像以前一样继续编译与运行。
以下是一些显着变化的详细说明:
(1) 工具链改进
Go 在 1.20 中推出配置文件引导优化 (PGO) 功能,如果主包目录中存在名为的default.pgo文件 ,go命令将使用它来启用 PGO 构建。测量 PGO 对多种 Go 程序的影响,发现性能可提高 2-7%。
该go工具现在支持向后和向前语言兼容性。
(2)语言变化
新增内置函数:min、max 和clear。
maxIntValue := max(0, 7, 6, 5, 4, 3, 2, 1) // 7 type int
minIntValue := min(8, 7, 6, 5, 4, 3, 2, 1) // 1 type int
Clear实例:
func main() {
m := map[int]int{1:1, 2:2, 3:3, 4:4, 5:5}
fmt.Println(len(m)) // 5
clear(m)
fmt.Println(len(m)) // 0
}
Go对泛型函数的类型推断进行了多项改进。规范中类型推断的描述已得到扩展和澄清。
在 Go 的未来版本中,将解决 Go 编程中最常见的问题之一:循环变量捕获。Go 1.21 已经附带了此功能的预览版,开发者可以使用环境变量在代码中启用该功能。
(3)标准库添加
1)用于结构化日志记录的新log/slog包。
2)新的切片包,用于对元素类型的切片进行操作。包括通常比排序包更快、更符合人体工程学的排序。
3)新的Map包,用于对任何Key或元素类型的映射进行操作。
4)新的cmp软件包具有用于比较有序值的新实用程序。
(4)提高性能
此版本除了启用 PGO 时的性能改进之外,还包括如下提升:
1)Go 编译器本身已经在 1.21 中启用了 PGO 进行了重建,因此在构建 Go 程序的速度将提高了 2-4%,具体取决于生产环境的架构。
2)垃圾收集器调整,某些应用程序的尾部延迟会减少高达 40%。
3)使用运行时/跟踪收集跟踪在 amd64 和 arm64 上产生的 CPU 开销进一步减少。
(5)WASI 的新接口
Go 1.21 添加了WebAssembly 系统接口 (WASI)的实验端口,称为预览版 1 ( GOOS=wasip1, GOARCH=wasm)。
为了方便编写更通用的 WebAssembly (Wasm) 代码,Go编译器还支持从 Wasm 主机导入函数的新指令:go:wasmimport。
(6)版本号规则调整
此外,Go 1.21 对版本号进行了一个微小的更改。
以前Go使用 Go 1.N 来指代整个 Go 语言版本系列,以及该系列中的第一个版本。从 Go 1.21 开始,第一个版本现在是 Go 1.N.0。因此,最新发布的是 Go 1.21 语言及其初始实现 Go 1.21.0 release。
今天总结和描述到这里。有关Go 1.21.0的完整更新列表,请大家参阅发行说明(https://go.dev/doc/go1.21)。