TinyGo 0.42 发布:panic 终于能 recover,但 OOM 依然不行
TinyGo 0.42 于 2026-09-01 发布。v0.42.0 在 2026-08-31 打 tag,包含超过 240 个 commit。
运行期 panic 现在可以 recover
此前在 TinyGo 里,空指针解引用、除零、切片/映射越界、channel panic 会直接把程序打崩,无法捕获。0.42 起标准 defer/recover 按预期工作,以下情况都能被捕获:
- nil 解引用
- div by zero
- 越界 slice/map
- channel panic
Windows 上加了 vectored exception handler 实现同样的行为,riscv64 上 recover 也可用。
需要留意的边界:
- OOM 这类致命错误仍然不可 recover——没有堆可以回退。
- runtime 里的 deadlock、栈溢出、runtime/GC 不变量破坏、非法锁操作,按主 Go 的语义直接终止,不走 panic/recover。
- 语言级 runtime 错误则保持可恢复。
新增最小 UEFI target:uefi-amd64
新增 uefi-amd64 target,可以把 Go 程序编译成 UEFI 应用,在任何操作系统启动之前运行。
支持 UEFI time 与 events,默认使用 tasks scheduler,因此 goroutine 可用。适用场景窄但真实:固件诊断、开机前配置工具、硬件校验脚本。
device 包新增 device/uefi 与 device/amd64。
工具链与编译器
- 支持 Go 1.27(含泛型方法,通过升级 x/tools)
- 支持 LLVM 22
- Fedora 43 上支持 LLVM 19/20
- 编译器现在生成 type-specific 的 hash/equal
- 新增
//go:noheappragma - 新增文件级
//go:linkname - GC、调度器、timer 有一批修复
硬件与外设
USB 在 RP2、SAMD21/51、nRF52840 上支持动态 endpoint。
新增/完善的硬件支持:
- ESP32:中断、ADC、flash XIP,以及 ESP32-C6
- STM32H7
- Puya PY32F
- ESP32-S3-BOX-3
- M5Stack Stamp-S3A
- Pimoroni Badger 2350
官方硬件套件
同时推出首款官方硬件套件:TinyGo Starter Kit with Seeed Studio XIAO。