皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

Go 1.21 发布

Go 1.21 发布

Go 1.21 简介
Go 1.20 发布 6 个月后,Go 最新发布了 1.21 版。它的大部分改动都是在工具链、运行时和库的实现方面。该版本一如既往地保持了 Go 1 的兼容性承诺;事实上,Go 1.21 在这一承诺的基础上更进一步。我们希望几乎所有 Go 程序都能一如既往地编译和运行。

Go 1.21 对发布版本的编号做了一个小改动。过去,我们使用 Go 1.N 来指代 Go 语言的整体版本和发布系列,以及该系列中的第一个发布版本。从 Go 1.21 开始,第一个版本现在是 Go 1.N.0。今天,我们同时发布 Go 1.21 语言及其初始实现,即 Go 1.21.0 版本。这些注释指的是 “Go 1.21″;go version 等工具将报告 “go1.21.0″(直到您升级到 Go 1.21.1)。有关新版本号的详细信息,请参阅 “Go 工具链 “文档中的 “Go 版本”。

语言变更
Go 1.21 新增了三个内置语言。

新函数 min 和 max 计算给定参数个数中的最小值(对于 max 而言,计算最大值)。详情请参见语言规范。
新函数 clear 删除 map 中的所有元素或将 slice 中的所有元素清零。详见语言规范。
现在可以更精确地指定包的初始化顺序。新算法是

按导入路径对所有软件包排序。
重复,直到软件包列表为空:
查找列表中第一个所有导入都已初始化的软件包。
初始化该软件包并将其从列表中移除。
这可能会改变某些程序的行为,因为这些程序依赖于特定的初始化顺序,而这种顺序并没有通过显式导入来表达。在过去的版本中,规范并没有很好地定义此类程序的行为。新规则提供了明确的定义。
多项改进提高了类型推断的能力和精度。

一个(可能部分实例化的)泛型函数现在可以用本身就是(可能部分实例化的)泛型函数的参数来调用。编译器将尝试推断被调用者缺失的类型参数(与以前一样),并为每个未完全实例 化的泛型函数参数推断其缺失的类型参数(新的)。

典型的用例是调用在容器上运行的泛型函数(如 slices.IndexFunc),其中的函数参数也可能是泛型的,被调用函数及其参数的类型参数是从容器类型中推断出来的。更一般地说,如果可以从赋值中推断出类型参数,那么在将泛型函数赋值给变量或作为结果值返回时,现在就可以使用泛型函数,而无需显式实例化。
现在,当一个值被赋值给一个接口时,类型推断也会考虑方法:方法签名中使用的类型参数的类型参数可以从匹配方法的相应参数类型中推断出来。
同样,由于类型参数必须实现其相应约束的所有方法,因此类型参数和约束的方法会进行匹配,这可能会导致推断出其他类型参数。
如果多个不同类型的无类型常量参数(如一个无类型的 int 和一个无类型的浮点常量)被传递给具有相同(未指定)类型参数类型的参数,现在类型推断将使用与具有无类型常量操作数的运算符相同的方法来确定类型,而不是出错。这一修改使从未定义类型的常量参数中推断出的类型与常量表达式的类型一致。
现在,类型推断在匹配赋值中的相应类型时更加精确:组件类型(如片元素或函数签名中的参数类型)必须相同(给定合适的类型参数)才能匹配,否则推断失败。这一变化产生了更准确的错误信息:过去类型推断可能会错误地成功并导致无效赋值,而现在如果两个类型不可能匹配,编译器就会报告推断错误。
更广泛地说,语言规范中对类型推断的描述已经更加清晰。所有这些改动使类型推断功能更强大,推断失败也不那么令人惊讶了。

Go 1.21 包含了我们正在考虑在 Go 未来版本中进行的语言修改的预览:将 for 循环变量改为每迭代而不是每循环,以避免意外的共享 bug。有关如何尝试这一语言变化的详细信息,请参见 LoopvarExperiment wiki 页面。

Go 1.21 现在定义,如果 goroutine 正在 panic,而 recover 被延迟函数直接调用,则保证 recover 的返回值不会为零。为了确保这一点,使用接口值为 nil(或未键入的 nil)调用 panic 会导致 *runtime.PanicNilError 类型的运行时 panic。

为支持为旧版 Go 编写的程序,可通过设置 GODEBUG=panicnil=1 重新启用 nil panic。如果编译程序的主软件包位于声明 go 1.20 或更早版本的模块中,则会自动启用此设置。

更多 Go 1.21 Release Notes – The Go Programming Language

已有 1 条评论 新浪微博
  1. @我的印象笔记

    2023年8月13日 09:35来自新浪微博

评论已关闭。

已有 1 条评论 新浪微博
  1. @我的印象笔记

    2023年8月13日 09:35来自新浪微博

评论已关闭。

-->