Go 1.28 的 vet 新增 scannererr / sqlrowserr:循环里漏检 Err 会被点名
Go 1.28 尚未发布。以下是 tip.golang.org/doc/next 上的草稿版 release notes,Go 1.28 预计在 2027 年 2 月发布。
vet
新增两个 analyzer:
scannererr:检查在bufio.Scanner.Scan外层循环结束后未处理 scanner 错误的情况。漏检会让扫描错误或 I/O 错误被静默吞掉,没有任何上报。sqlrowserr:对sql.Rows.Next外层循环做同样的检查,目的是把迭代过程中的错误与「结果集本来就比较小」区分开,避免把出错当成正常结束。
Bootstrap
Go 1.26 的 release notes 中已经提过:Go 1.28 现在要求用 Go 1.26.0 或更高版本来 bootstrap。按目前计划,Go 1.30 会要求 Go 1.28.0 的某个小版本或更高版本。
encoding/base32 与 encoding/base64
Encoding.EncodedLen 在编码长度溢出 int 时改为 panic,不再返回负数。
go/parser
ResolveFile 对 ast.File 语法树执行旧的语法级标识符解析。这套解析方式已弃用,新应用应改用 go/types。保留该函数是为了让迁移过程平滑一些。
net
IPMask、IPNet、HardwareAddr 现在各自实现了 encoding.TextUnmarshaler。该方法同时识别这些类型当前的 marshaling 形式,以及计划中的未来 marshaling 格式。未来格式相比当前格式(base64 编码)的差别在于它在 JSON 里是可读的;该格式会在后续某个 Go 版本中成为默认值。
之所以分两步走,是为了让本版本 Go 生成的 JSON 仍能被更早的 Go 版本读取。
net/http
当小写和大写代理环境变量同时存在且取值不同时,ProxyFromEnvironment 现在优先采用小写版本(http_proxy、https_proxy、no_proxy)。这一改动同样影响 DefaultTransport 和 DefaultClient 中默认的代理查找逻辑。
net/url
新增 MustParse:解析成功返回 URL,失败则 panic。它可以简化 Parse 的一些常见用法,例如用合法的 URL 字符串常量初始化变量。
syscall
在 Linux 上,SysProcAttr 现在支持对新创建的子进程施加 Landlock 策略,以及设置 PR_SET_NO_NEW_PRIVS 标志。
testing/synctest
新增便捷函数 Subtest,把 testing.(*T).Run 和 testing/synctest.Test 组合在一起。
跟踪信息
- Tracking issue:golang/go#79581(Go 1.28 开发分支于 2026 年 8 月重新开放)
- Release freeze 开始时间:2026 年 11 月 24 日,星期二
- 文档:go.dev/doc/go1.28(暂无片段)