大家好,我是煎鱼。
新版本 Go1.24 在 2 月 11 号已经正式发布,如果先前还没有留到的同学,可以关注下是否跟进了。

先前我们已经更新了多篇新特性介绍。今天将会是最后一篇知识点的收尾。
操作系统要求
Linux 内核版本 >= 3.2
在本次 Go1.24 新版本开始,需要 Linux 内核 3.2 版本或更高版本(划重点)。
如果公司里的集群环境历史底蕴比较深的,建议升级前检查一下。(我们就是,提前一个版本升级申请集群升级了)
因为 Linux 内核 3.19 是先前较为常用的一个版本,可能有的集群环境以前安装了,就一直没有再动。就需要提前安排升级。
macOS 版本要求
Go1.24 是能在 macOS 11 Big Sur 上运行的最后一个版本。Go1.25 需要 macOS 12 Monterey 或更高版本。
WebAssembly 功能增强
在 Wasm 发展历程上,Go 在 1.11 版本首次添加了对编译为 Wasm 的支持,通过 js/wasm
端口实现。Go1.21 增加了一个新端口,针对 WASI preview 1
系统调用 API,即新的 GOOS=wasip1
端口。
本次 Go1.24 引入了 go:wasmexport
指令和构建 WebAssembly System Interface(WASI)反应器的能力,增强 Go 对 WebAssembly(Wasm)的进一步能力支持。
使用 go:wasmexport 导出 Go 函数
Go 1.24 引入了新的编译器指令 go:wasmexport
,允许开发者将 Go 函数导出,以便从 Wasm 模块外部调用,通常由运行 Wasm 运行时的主机应用调用。
该指令指示编译器在生成的 Wasm 二进制中将被注释的函数作为 Wasm 导出。
要使用 go:wasmexport
指令,只需在函数定义上添加:
//go:wasmexport add
func add(a, b int32) int32 { return a + b }
这样 Wasm 模块将有一个名为 add 的导出函数,可供主机调用。
这类似于 cgo 的导出指令,使函数可被 C 调用,但 go:wasmexport
使用了不同且更简单的机制。
构建 WASI 反应器(Reactor)
WASI 反应器(Reactor)是一个持续运行的 WebAssembly 模块,可多次被调用以响应事件或请求。与在主函数结束后终止的“命令”模块不同,反应器实例在初始化后保持活跃,其导出功能仍然可访问。
在 Go 1.24 中,可以使用 -buildmode=c-shared 构建 WASI 反应器:
$ GOOS=wasip1 GOARCH=wasm go build -buildmode=c-shared -o reactor.wasm
该构建标志指示链接器不生成 _start
函数(命令模块的入口点),而是生成 _initialize
函数,执行运行时和包的初始化,以及任何导出函数及其依赖项。在调用导出函数之前,必须先调用 _initialize
函数。
通过本次版本支持的新特性,Go 开发可以更轻松地创建和导出 Wasm 模块,构建可扩展的应用程序,并与各种 Wasm 主机环境集成。
text/template 支持 range-over
在标准库 text/template
中,原有提供:
{{range pipeline}} T1 {{end}}
但是在原有的 pipeline 中,值必须是 array、slice、map 或者是 channel。

在本次 Go1.24 中,将先前支持的 for-range 支持函数(迭代器)和整型迭代也支持到了模版库里。
math/rand 随机数禁用全局种子
在 Go1.24 中,标准库 math/rand
的全局函数 rand.Seed
将默认变为“无操作”(no-op),即调用此函数不再产生实际效果。
此行为可通过 GODEBUG=randseednop=1
控制。若需恢复旧版行为,可在代码中添加 //go:debug randseednop=0
指令(此兼容性支持至少持续到 Go 1.27)。

如果后续需保持确定性随机数行为(如科学模拟),应替换 rand.Seed
的使用方式。
我们可以用 rsc 推荐的 r := rand.New(rand.NewSource(s))
代替 rand.Seed(s)
。
例如:
import mathrand "math/rand"
var rand = mathrand.New(mathrand.NewSource(seed))
该方式通过局部实例生成随机数,规避全局状态冲突。
总结
本次 Go1.24 新版本特性的系列基本已经完结,本次新版本还是带来了许多新的创新小突破的。
欢迎大家有需要的同学可以尽快开始用起来。
推荐阅读
关注和加煎鱼微信,
一手消息和知识,拉你进技术交流群👇
你好,我是煎鱼,出版过 Go 畅销书《Go 语言编程之旅》,再到获得 GOP(Go 领域最有观点专家)荣誉,点击蓝字查看我的出书之路。
日常分享高质量文章,输出 Go 面试、工作经验、架构设计,加微信拉读者交流群,和大家交流!
原创不易 点赞支持