在
Go 1.22
版本发布
6
个月之后,
Go 1.23
于北京时间
2024
年
8
月
14
日凌晨
1:03
正式发布。此次更新的主要变化集中在工具链、运行时和库的实现上。让我们一起来看看
Go 1.23
带来了哪些新变化吧!
准备好了吗?准备一杯你最喜欢的咖啡或茶,随着本文一探究竟吧。
快速安装
您可以从下载页面下载二进制和源代码发行版:
https://go.dev/dl/#go1.23.0
如果你已经安装了其他的
Go
语言版本,你也可以通过以下命令快速安装
Go 1.23.0
版本:
$ go install golang.org/dl/go1.23.0@latest
$ go1.23.0 download
Downloaded 0.0% ( 16384 / 71607288 bytes) ...
Downloaded 11.0% ( 7880688 / 71607288 bytes) ...
Downloaded 41.7% (29835136 / 71607288 bytes) ...
Downloaded 61.6% (44121808 / 71607288 bytes) ...
Downloaded 77.7% (55639936 / 71607288 bytes) ...
Downloaded 95.1% (68107968 / 71607288 bytes) ...
Downloaded 100.0% (71607288 / 71607288 bytes)
Unpacking /Users/chenmingyong/sdk/go1.23.0/go1.23.0.darwin-arm64.tar.gz ...
Success. You may now run 'go1.23.0'
$ go1.23.0 version
go version go1.23.0 darwin/arm64
不同操作系统,输出信息可能会略有不同。
语言层面的更新
Go 1.23
将
Go 1.22
中的
range-over-func
实验正式纳入了语言规范中。现在
for-range
循环中的
range
子句可以接受以下类型的迭代器函数作为
range
表达式:
func(func() bool)
func(func(K) bool)
func(func(K, V) bool)
这些迭代器函数的调用将生成
for-range
循环的迭代值。
下面是使用迭代器函数的简单示例:
package main
import "fmt"
func main() {
s := []string{"程序员", "陈明勇"}
for i, v := range Backward(s) {
fmt.Println(i, v)
}
}
// Backward 倒序迭代
func Backward[E any](s []E) func(yield func(int, E) bool) {
return func(yield func
(int, E) bool) {
for i := len(s) - 1; i >= 0; i-- {
if !yield(i, s[i]) {
return
}
}
}
}
程序运行结果:
1 陈明勇
0 程序员
此外,
Go 1.23
引入了泛型类型别名的预览支持。通过在构建工具链时设置
GOEXPERIMENT=aliastypeparams
,可以在包内启用此功能(目前尚不支持跨包边界使用泛型类型别名)。
工具链的改进
-
Go telemetry
遥测系统:允许
Go
的工具链(编译器、调试器等工具)收集使用和故障统计数据。这些数据的收集是为了帮助开发团队了解
Go
工具链的使用情况和运行状态,从而对工具链进行改进和优化。
-
Go
命令:新增了一些便利的功能。例如运行
go env -changed
可以更容易地查看哪些设置的有效值与默认值不同,而
go mod tidy -diff
可以在不修改
go.mod
和
go.sum
文件的情况下,帮助你查看需要进行的更改。
-
Go vet 子命令
:现在能够检测代码中使用的某些特性或函数是否对于目标
Go
版本来说太新了。
标准库的改进
-
优化了
time.Timer
与
time.Ticker
两个定时器的实现。
-
标准库中新增了总共三个包:
iter
、
structs
和
unique
。
-
iter
:提供了与序列上的迭代器相关的基本定义和操作。
-
structs
:定义了标记类型,用于修改结构体的属性。
-
unique
:提供了规范化(“interning”)可比较值的工具。
-
支持在
go.mod
和
go.work
文件中使用新的
godebug
指令,以独立控制默认的
GODEBUGs
和
go.mod
的
go
指令。
其他的改进和变更
-
Go 1.23
版本为
OpenBSD
系统上的
64
位
RISC-V
架构提供了实验性支持。此外,该版本还包含了针对
Linux
、
macOS
、
ARM64
、
RISC-V
和
WASI
等系统的若干小改动。
-
在使用配置文件引导优化(
PGO
)技术的构建过程中,构建时间得到了缩短,且在
386
和
amd64
架构上运行性能也得到了提升。
小结
本文概述了
Go 1.23.0
版本的主要更新,涵盖了语言层面的更新、工具链的改进以及标准库的改进等方面。
想要深入了解更多关于此版本的具体更新详情,移至 Go 1.23 发布博客(
https://go.dev/blog/go1.23
)和 Go 1.23 官方文档(https://go.dev/doc/go1.23)。
- END -