一、前言
2025 年 11 月,Go 团队发布了:
- 版本 Go 1.25.4,基于 Go 1.25 系列的小版本修复。(go.dev)
- 版本 Go 1.24.10,基于 Go 1.24 系列的小版本修复。(go.dev)
根据官方 Release History 页面:
- Go 1.25.4 于 2025-11-05 发布。(go.dev)
- Go 1.24.10 于 2025-11-05 发布。(go.dev)
两个版本均为 小版本(patch)修复,目的在于解决已知缺陷、提升稳定性、安全性,而不是新增功能。(go.dev)
二、里程碑摘要(CherryPickApproved)
以下内容均来自 GitHub issues 所有修复项状态均为 "已关闭(已完成)",关闭操作由 gopherbot 执行。
Go 1.25.4
1、pem/encoding:格式错误的行结尾可能导致程序崩溃
- 关闭时间:2025 年 10 月 30 日
- 说明:该修复针对 pem 编码模块,解决了当处理的文件或数据中存在格式不正确的行结尾(如换行符、回车符格式异常)时,可能引发程序突然崩溃(panic)的问题
2、cmd/compile:any (func (){})==any (func (){}) 语句未按预期触发程序崩溃
- 关闭时间:2025 年 10 月 30 日
- 说明:在 Go 语言编译器层面,对于 "any (func (){})==any (func (){})" 这种比较两个匿名函数包装为 any 类型后是否相等的语句,原本按照设计应触发程序崩溃,但此前版本未实现该逻辑,此修复纠正了这一问题
3、os:在 Windows 系统中,RemoveAll 函数删除包含只读文件的目录时,出现 "unlinkat ... 访问被拒绝" 错误
- 关闭时间:2025 年 10 月 29 日
- 说明:针对 Windows 操作系统下 os 模块的 RemoveAll 函数,解决了其在删除包含只读属性文件的目录时,会因权限问题抛出 "unlinkat ... 访问被拒绝" 错误,导致目录无法正常删除的问题
4、 encoding/pem:解码包含前置无用数据的块时出现功能退化问题
- 关闭时间:2025 年 10 月 25 日
- 说明:在 encoding/pem 模块解码 PEM 数据块过程中,当数据块前存在无关的前置无用数据(如多余字符、空白内容等)时,模块出现了解码功能退化(如解码失败、结果异常)的情况,此修复解决了该问题
5、net/url:方括号中的 IPv4 映射 IPv6 地址应被视为有效地址
- 关闭时间:2025 年 10 月 18 日
- 说明:在 net/url 模块处理 URL 地址时,对于 "IPv4 映射 IPv6 地址"(即通过特定格式将 IPv4 地址嵌入 IPv6 地址中),当该地址包裹在方括号内时,此前版本未将其识别为有效地址,此修复修正了这一判定逻辑,使这类地址能被正常识别
6/crypto/internal/fips140/subtle:Go 1.25 版本中,subtle.xorBytes 函数在 MIPS 架构上出现程序崩溃
- 关闭时间:2025 年 10 月 29 日
- 说明:在 Go 1.25 版本的 crypto/internal/fips140/subtle 内部模块中,subtle.xorBytes 函数在 MIPS 架构的设备或环境上运行时,会出现程序崩溃的情况,此修复解决了该架构下的兼容性问题
7、runtime:在 linux/arm64 架构上通过 QEMU 运行 linux/amd64 架构的编译任务时,构建失败
- 关闭时间:2025 年 10 月 28 日
- 说明:在 Go 运行时(runtime)层面,当在 linux/arm64 架构的系统中,通过 QEMU(一种虚拟机 / 模拟器工具)模拟运行 linux/amd64 架构的 Go 程序编译任务时,会出现构建过程失败的问题,此修复解决了该跨架构模拟编译的问题
8、cmd/link:处理复杂泛型内联时,链接器出现程序崩溃及重定位错误
- 关闭时间:2025 年 10 月 28 日
- 说明:在 Go 的链接器(cmd/link)处理包含复杂泛型内联(即将泛型函数的代码嵌入调用处)的程序时,链接器会出现程序崩溃,同时还会产生重定位错误(程序内存地址分配相关错误),此修复解决了这些链接阶段的问题
Go 1.24.10
1、pem/encoding:格式错误的行结尾可能导致程序崩溃
- 关闭时间:2025 年 10 月 30 日
- 说明:该修复针对 pem 编码模块,解决了当处理的文件或数据中存在格式不正确的行结尾(例如换行符、回车符格式异常)时,可能引发程序突然崩溃(panic)的问题,此修复是从更高版本回溯到 1.24 版本的。
2、encoding/pem:解码包含前置无用数据的块时出现功能退化问题
- 关闭时间:2025 年 10 月 25 日
- 说明:在 encoding/pem 模块解码 PEM 数据块的过程中,当数据块前存在无关的前置无用数据(如多余字符、空白内容等)时,模块出现了解码功能退化(比如解码失败、结果异常)的情况,此修复解决了该问题,且是从其他版本回溯至 1.24 版本的。
3、net/url:方括号中的 IPv4 映射 IPv6 地址应被视为有效地址
- 关闭时间:2025 年 10 月 18 日
- 说明:在 net/url 模块处理 URL 地址时,对于 "IPv4 映射 IPv6 地址"(即通过特定格式将 IPv4 地址嵌入到 IPv6 地址中形成的地址),当该地址包裹在方括号内时,此前的 1.24 版本未将其识别为有效地址,此修复修正了这一地址有效性判定逻辑,使这类地址能够被正常识别,且该修复是从更高版本回溯到 1.24 版本的。
三、升级选择
- 如果在使用 Go.1.25 系列的,强烈建议尽快升级至1.25.4,该版本对编译器、运行时、标准库等多个模块进行了修复,使用该版本可以提高项目的稳定性,避免出现潜在 painc 和多平台兼容性的问题。
- 如果在使用 Go.1.24 系列的,仍然建议升级只至 1.24.10,以提高稳定性。
- 对一跨平台、异构硬件运行的项目,更应优先升级,以避免跨平台相关的已知问题。
四、升级建议
1、 升级方式
- 【推荐】通过 Go 官方二进制或源码包的方式进行编译升级,参考 Release History 的版本说明(go.dev)
- 【推荐】通过 Homebrew 安装源码包的方式进行编译升级(macos)
2、注意事项
- 升级后注意观察是否有新问题产生
- 建议升级前执行完整的回归测试