17611538698
webmaster@21cto.com

Go 1.21.0 正式发布

资讯 2 1812 2023-08-10 06:04:19

图片

导读: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 intminIntValue := 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)。

作者:万能的大雄

评论