将 C 和 C++ 代码编译为 WebAssembly,使其可在浏览器、Node.js 等环境运行的编译工具链。
tinygo-org/tinygo
基于 LLVM 的 Go 编译器,面向微控制器、WebAssembly 和命令行工具。
- Star
- 17,828
- Fork
- 1,093
- 未关闭 Issue
- 601
- 最近提交
- 10小时前
这是什么?
TinyGo 是一个面向小型环境的 Go 编译器。它复用了 Go 官方工具链中的部分库,并以 LLVM 作为后端,让同一份 Go 代码可以编译到微控制器、WebAssembly 运行时以及桌面操作系统上。
在嵌入式方面,程序通过 machine 包控制 GPIO 引脚和外设,支持 Arduino、Adafruit、Seeed Studio 等多个系列的开发板,可以用 tinygo flash 命令选择目标板直接烧录。在 WebAssembly 方面,TinyGo 可以生成用于浏览器(WASM)和 WASI 运行时的模块,并能与 Fastly Compute、Fermyon Spin、wazero 等平台配合使用。
项目的目标是生成体积很小的二进制文件,支持常见开发板,并尽可能无需修改即可编译标准库和大多数 Go 代码。它并不追求超过标准 gc 编译器的性能,也不承诺能编译所有 Go 程序。
核心功能
- 01支持为 150 多种微控制器开发板编译 Go 程序。
- 02可生成用于浏览器(WASM)和 WASI 运行时的 WebAssembly 模块。
- 03使用 LLVM 作为代码生成后端,而非输出 C 代码。
- 04支持编译到 Linux、macOS 和 Windows 目标。
- 05提供 tinygo 命令行工具,包含 flash 和 build 等子命令。
适用场景
- 用 Go 为 Arduino、micro:bit 等小型开发板编写固件。
- 通过 WebAssembly 把 Go 代码运行在浏览器或边缘平台上。
- 为 Fermyon Spin、wazero 等运行时开发 WASI 组件。
- 为资源受限的设备生成体积较小的可执行文件。
快速上手
- 1
按照入门指南安装 TinyGo
- 2
将 blinky 示例编译并烧录到 Arduino Uno
tinygo flash -target arduino-uno examples/blinky1 - 3
将 WASI 程序构建为 WebAssembly 模块
tinygo build -buildmode=c-shared -o add.wasm -target=wasip1 add.go
使用前须知
- 并非所有 Go 程序都能编译,项目明确不以支持全部 Go 代码为目标。
- 部分内置代码来自 LLVM 和 Teensy 库,采用不同许可证,因此许可证较为混合。
标签
常见问题
- tinygo 是什么?
- 基于 LLVM 的 Go 编译器,面向微控制器、WebAssembly 和命令行工具。 TinyGo 是一个面向小型环境的 Go 编译器。它复用了 Go 官方工具链中的部分库,并以 LLVM 作为后端,让同一份 Go 代码可以编译到微控制器、WebAssembly 运行时以及桌面操作系统上。
- tinygo 可以免费使用吗?用的什么许可证?
- tinygo 以 Other 许可证开源。用于商业产品前,请先确认许可证条款。
- tinygo 还在维护吗?
- 活跃维护中。tinygo 最近一次提交是在 2026年10月21日。
- tinygo 适合用来做什么?
- 用 Go 为 Arduino、micro:bit 等小型开发板编写固件。 通过 WebAssembly 把 Go 代码运行在浏览器或边缘平台上。 为 Fermyon Spin、wazero 等运行时开发 WASI 组件。 为资源受限的设备生成体积较小的可执行文件。
- tinygo 怎么安装和运行?
- 按照入门指南安装 TinyGo 将 blinky 示例编译并烧录到 Arduino Uno: tinygo flash -target arduino-uno examples/blinky1 将 WASI 程序构建为 WebAssembly 模块: tinygo build -buildmode=c-shared -o add.wasm -target=wasip1 add.go
- 在哪里获取 tinygo?
- 源代码和安装说明在 GitHub 上:https://github.com/tinygo-org/tinygo
概要由 AI 根据项目 README 生成;GitHub 数据每日更新。
相关项目
面向微控制器等资源受限设备的精简 Python 3 实现,并提供硬件外设访问模块。
一个实验性的编译器,可将 TypeScript/JavaScript 编译为原生可执行文件或 WebAssembly,运行时无需 Node.js。
一个采用 MIT 许可的免费 C 语言 UI 库,用于在从小型 MCU 到 Linux MPU 的嵌入式设备上构建图形界面。
基于 Cranelift 代码生成器的独立 WebAssembly 运行时,支持 WASI 并提供多语言嵌入接口。