Go语言

Chinese, Simplified
SEO Title
Go Language

【Go语言】Go 1.18 中的新功能

Chinese, Simplified

Go 1.18 中的新功能


泛型、测试模糊、AMD64 优化、工作区模式等


又到了一年中的那个时候:一个新的 Go 版本即将发布。 Go 团队刚刚发布了 Go 1.18 候选版本 1 (go1.18rc1),预计在 2022 年 2 月之前发布 Go 1.18。


Go 1.18 是长期以来最受期待的 Go 版本之一,这是有充分理由的。 Go 1.18 实现了对泛型类型和函数的初步支持,这是 Go 社区最想要的——也许也是最有争议的——特性。


除了泛型之外,Go 1.18 还包含许多其他强大的功能,例如支持测试 fuzzing、微架构支持和 AMD64 CPU 的优化、对 go 工具的更改,包括对“工作区”模式的支持、对核心库的一些更新,以及许多错误修复和标准库的小更新。
让我们来看看一些主要的更新。


支持泛型


泛型是此版本中最受期待的功能。根据泛型提案,Go 1.18 支持泛型类型和函数的初始实现。有了这个新增功能,该语言支持声明参数化类型和函数,这些类型和函数可以在以后使用不同的参数类型进行实例化。
泛型的使用允许您将具有相似实现但对不同输入类型进行操作的函数或类型集合并到更易于测试和维护的单个实体中,从而提高了通用代码的可重用性。
例如,某些库的代码类似于以下内容是很常见的:

func SumInt(a, b int) int {
        return a + b
}func SumFloat32(a, b float32) float32 {
        return a + b
}func SumFloat64(a, b float64) float64 {
        return a + b
}//func sum...

通过使用泛型函数,您可以将所有这些函数合并为一个函数:

func Sum[T constraints.Ordered] (a, b T) T {
return a + b
}

因为这是语言的重大变化,而且它是一个全新的功能,所以存在一些限制,可能会影响性能,并且可能存在未知问题。在生产中部署通用代码时要注意这些不确定性。
有关泛型的更多信息,请查看发行说明和更新的语言规范。


测试模糊


Go 1.18 的另一个受欢迎的补充是对测试模糊测试的支持。 Fuzzing 是一种软件测试策略,它涉及向被测试的代码提供大量随机输入参数,包括许多边缘情况,目的是捕捉错误、暴露错误、触发异常和发现人类难以发现的漏洞探测。
Go test fuzzing 在测试包 testing.F 中增加了一种新的类型,并扩展了 Go 目前的特性和策略,例如 Table Driven Testing。在此版本之前,您可以使用外部库来执行测试模糊测试,但在标准工具中添加模糊测试将为更多开发人员提供更好的支持和更轻松的访问。
🌟 请注意——Go 团队提醒我们当前的 fuzzing 实现使用了大量系统资源,并且可能会在执行期间影响系统的性能。
有关更多详细信息,请参阅 Go Fuzzing 文档。


AMD64 CPU 的微架构优化


Go 1.18 为 AMD64 处理器引入了微架构优化。您现在可以使用新的 Go 环境变量 GOAMD64 来选择四个微架构目标 v1、v2、v3 或 v4 之一,以指示编译器针对特定 CPU 功能优化生成的二进制文件。它导致优化的二进制指令与不具有这些功能的处理器不兼容。
变量 GOAMD64=v1 的默认值导致二进制指令与所有 64 位 x86 处理器兼容。
有关此功能的更多详细信息,请参阅最低要求页面的架构部分。

进入工作区模式


最后,对于最后一个突出显示的更新,Go 1.18 为 go 命令引入了新的工作区模式支持,它允许您同时处理多个模块。以前,使用多个模块并不容易,并且可能会导致工具和 IDE 出现问题。这个新功能解决了这些问题,对其他工具(例如 gopls)进行了更改,以简化对多个模块的工作。
通过此更改,如果 go 命令或工具在当前目录或父目录中找到名为 go.work 的文件,它将以工作空间感知模式运行。然后它使用这个文件的内容来确定使用哪些模块来解决依赖关系,而不是使用 go.mod 文件。
在 Go 1.18 中,您可以使用 go work 命令创建和管理 go.work 文件。有关更多信息,请参阅其文档。
有关工作区功能的更详细说明以及许多其他 Go 1.18 改进的概要,请查看 Go Time 播客的第 217 集。


下一步是什么?


本文简要总结了 Go 1.18 的主要更新,但还有许多额外的错误修复和对工具、编译器和标准库的小改进。如需完整列表,请查看 Go 1.18 发行说明。
如果您等不及几周后的最终版本,并且想立即开始测试 Go 1.18 而不在您的机器上安装它,请访问 Go Playground 并从 Go 发布下拉列表中选择 Go Dev Branch。您也可以使用 Podman 或 Docker 将其作为容器运行。


如果您希望将其安装在您的机器上以便您可以使用一些代码进行测试,请按照下载页面上的说明将 Go 1.18 RC1 下载到您的本地机器。

原文:https://medium.com/pragmatic-programmers/whats-new-in-go-1-18-e7773a110…

本文:https://jiagoushi.pro/node/2013

SEO Title
What's New in Go 1.18