前言
Gopher
们,Go 1.24.0
发布啦!Go 1.24.0
相比 Go 1.23.0
有许多改进。让我们一起来看看 Go 1.24.0
带来了哪些新变化吧!
准备好了吗?准备一杯你最喜欢的咖啡或茶,随着本文一探究竟吧。
快速安装
您可以从下载页面下载二进制和源代码发行版:
如果你已经安装了其他的 Go
语言版本,你也可以通过以下命令快速安装 Go 1.24.0
版本:
$ go install golang.org/dl/go1.24.0@latest
$ go1.24.0 download
Downloaded 0.0% ( 16384 / 87052317 bytes) ...
Downloaded 9.4% ( 8224752 / 87052317 bytes) ...
Downloaded 13.1% (11403248 / 87052317 bytes) ...
Downloaded 54.7% (47579136 / 87052317 bytes) ...
Downloaded 58.0% (50495488 / 87052317 bytes) ..
Downloaded 95.9% (83443664 / 87052317 bytes) ...
Downloaded 99.4% (86507056 / 87052317 bytes) ...
Downloaded 100.0% (87052317 / 87052317 bytes)
Unpacking /Users/chenmingyong/sdk/go1.24.0/go1.24.0.darwin-arm64.tar.gz ...
Success. You may now run 'go1.24.0'
$ go1.24.0 version
go version go1.24.0 darwin/arm64
语言层面上的更新
Go 1.24
现在完全支持泛型类型别名:类型别名可以像定义的类型一样被参数化。
// 1.24.0 版本之前
type MyInt[T comparable] = int // 错误提示:Generic type cannot be alias
// 1.24.0 版本及之后
type MyInt[T comparable] = int // 符合语法规定
性能改进
在 Go
运行时做了一些性能优化,平均减少了 2-3%
的 CPU 开销,测试覆盖了一些典型的基准。主要的优化有:用瑞士表(Swiss Tables
)重新实现了内置的 map
、更高效的小对象内存分配以及新的运行时内部互斥锁实现。
工具改进
go
命令现在提供了一个机制来跟踪模块的工具依赖。使用go get -tool
可以将工具指令添加到当前模块中。使用go tool [tool name]
来运行通过工具指令声明的工具。新的
go vet
子命令中的测试分析器会报告测试包中常见的错误,比如在声明测试、模糊测试、基准测试和示例时的常见问题。
标准库新增内容
- 新增了一个弱引用(
weak
)包,提供了弱指针。 Go
的标准库现在新增了一组机制,帮助实现FIPS 140-3
合规性。应用程序无需修改源代码,就能使用这些新机制来支持经过批准的算法。除了FIPS 140
相关内容,之前在x/crypto
模块中的一些包现在已经移到标准库中。- 基准测试现在可以使用更快速且更不易出错的
testing.B.Loop
方法来执行基准迭代,比如用for b.Loop() { ... }
来代替传统的使用b.N
的循环结构(比如for range b.N
)。 - 新的
os.Root
类型提供了在特定目录下隔离执行文件系统操作的能力。 - 运行时现在提供了一个新的终结机制
runtime.AddCleanup
,它比runtime.SetFinalizer
更加灵活、高效,并且更不容易出错。 - 新增了一个实验性的
testing/synctest
包,用于支持并发代码的测试。synctest
包是实验性的,在构建时必须通过设置GOEXPERIMENT=synctest
来启用。
WebAssembly 支持改进
Go 1.24
新增了 go:wasmexport
指令,用于将 Go
程序的函数导出到 WebAssembly
主机。同时,Go
现在支持将程序构建为 WASI reactor/library
。
小结
在本文中,简要介绍了 Go 1.24.0
版本的主要更新,涵盖了语言层面的提升、性能优化、工具链的改进以及标准库中的新增内容。
除此之外,Go 1.24.0
还在一些细节上进行了小的改进,提升了开发体验。
后续,我将深入介绍每个重要更新的具体内容,关注我,更多精彩的更新分析,敬请期待!
你好,我是陈明勇,一名热爱技术、乐于分享的开发者,同时也是开源爱好者。
成功的路上并不拥挤,有没有兴趣结个伴?
关注我,加我好友,一起学习一起进步!