Go 1.23 版本发布啦,这些重大更新你一定要知道!

Go 1.23 版本介绍

Go 1.22 版本发布 6 个月之后,Go 1.23 于北京时间 2024814 日凌晨 1:03 正式发布。此次更新的主要变化集中在工具链、运行时和库的实现上。让我们一起来看看 Go 1.23 带来了哪些新变化吧!

准备好了吗?准备一杯你最喜欢的咖啡或茶,随着本文一探究竟吧。

0ee676dbe8d347c5bcc0d1e31acb2262.jpeg

快速安装

您可以从下载页面下载二进制和源代码发行版:

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.23Go 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.modgo.sum 文件的情况下,帮助你查看需要进行的更改。

  • Go vet 子命令:现在能够检测代码中使用的某些特性或函数是否对于目标 Go 版本来说太新了。

标准库的改进

  • 优化了 time.Timertime.Ticker 两个定时器的实现。

  • 标准库中新增了总共三个包:iterstructsunique

    • iter:提供了与序列上的迭代器相关的基本定义和操作。

    • structs:定义了标记类型,用于修改结构体的属性。

    • unique:提供了规范化(“interning”)可比较值的工具。

  • 支持在 go.modgo.work 文件中使用新的 godebug 指令,以独立控制默认的 GODEBUGsgo.modgo 指令。

其他的改进和变更

  • Go 1.23 版本为 OpenBSD 系统上的 64RISC-V 架构提供了实验性支持。此外,该版本还包含了针对 LinuxmacOSARM64RISC-VWASI 等系统的若干小改动。

  • 在使用配置文件引导优化(PGO)技术的构建过程中,构建时间得到了缩短,且在 386amd64 架构上运行性能也得到了提升。

小结

本文概述了 Go 1.23.0 版本的主要更新,涵盖了语言层面的更新、工具链的改进以及标准库的改进等方面。

想要深入了解更多关于此版本的具体更新详情,移至 Go 1.23 发布博客(https://go.dev/blog/go1.23)和 Go 1.23 官方文档(https://go.dev/doc/go1.23)。

- END -


推荐阅读:

6 个必须尝试的将代码转换为引人注目的图表的工具

Go 1.23新特性前瞻

Gopher的Rust第一课:第一个Rust程序

Go早期是如何在Google内部发展起来的

2024 Gopher Meetup 武汉站活动

go 中更加强大的 traces

「GoCN酷Go推荐」我用go写了魔兽世界登录器?

Go区不大,创造神话,科目三杀进来了

想要了解Go更多内容,欢迎扫描下方👇关注公众号,扫描 [实战群]二维码  ,即可进群和我们交流~


- 扫码即可加入实战群 -

e17ae0e24cf60bab810d0a38d1f25ae9.png

ab6619cdb83c4b751d1291767ee18e76.png

分享、在看与点赞Go 3bcf4b07ac0cac499c6719467d4a19ab.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值