编程 TinyGo 0.42 发布:panic 终于能 recover,但 OOM 依然不行

2026-10-03 21:01:25

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:noheap pragma
  • 新增文件级 //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。

复制全文 生成海报 TinyGo Go 嵌入式 UEFI 编译器

推荐文章

程序员茄子在线接单