Go 1.22 发行说明:2个亮点


Go 1.22 尚未发布。这些是正在进行的发行说明。Go 1.22 预计将于 2024 年 2 月发布。

语言主要变化:

  • Go 1.22对"for"循环进行了改变,每次迭代都创建新的变量,避免了意外共享错误。
  • Go 1.22引入了对整数的"for"循环范围,使得迭代整数成为可能。
  • Go 1.22提供了一些改进和新功能,包括对trace工具的UI界面的改进,以及vet工具的新警告和优化。

"for"循环代码:

package main

import "fmt"

func main() {
  for i := range 10 {
    fmt.Println(10 - i)
  }
  fmt.Println(
"go1.22 has lift-off!")
}

增强的路由模式:
增强的HTTP路由和提取路径值的能力:
id:= r.PathValue(“id”)

标准库中的 HTTP 路由现在更具表现力。使用的模式net/http.ServeMux已得到增强,可以接受方法和通配符。

使用方法(如 "POST /items/create")注册处理程序后,处理程序的调用就仅限于使用给定方法的请求。带方法的模式优先于不带方法的匹配模式。作为一种特例,用 "GET "注册处理程序也会用 "HEAD "注册。

模式中的通配符(如 /items/{id})可匹配 URL 路径的段。实际段值可通过调用 Request.PathValue 方法访问。以"... "结尾的通配符,如 /files/{path...},必须出现在模式的末尾,并匹配所有剩余网段。

以"/"结尾的模式会一如既往地匹配以其为前缀的所有路径。要匹配包括尾部斜线在内的精确模式,请以 {$} 结尾,如 /exact/match/{$}。

如果两个模式所匹配的请求重叠,则以更具体的模式优先。如果两者都不更具体,则模式冲突。该规则概括了原来的优先规则,并保持了模式注册顺序无关紧要的特性。

这一改动在很小程度上打破了向后兼容性,有些改动是显而易见的--带有"{"和"}"的模式表现不同,有些改动则不那么明显--对转义路径的处理有所改进。这一变化由名为 httpmuxgo121 的 GODEBUG 字段控制。设置 httpmuxgo121=1 可恢复旧的行为。

总结
Go 1.22新增了对vendor目录的支持,不再支持在GOPATH模式下使用go get命令。还有对trace工具、vet工具、runtime、compiler、linker等的改进和优化。此外,还介绍了math/rand/v2包的新增和HTTP路由模式的改进。总的来说,Go 1.22版本带来了一些语言和工具方面的改进和优化。