TinyGo

tinygo

比赛/竞技、ESP32 🧩 软硬件结合 已发布
tinygo-org 17460 Stars BOM 完整度: 3/5 教程完整度: 0/5

项目简介

TinyGo:面向微控制器、WASM及CLI的Go编译器,基于LLVM。


TinyGo是一个专为微控制器、WebAssembly和命令行工具设计的Go语言编译器,它通过精简Go运行时和标准库,使Go代码能在资源受限的嵌入式设备上运行。核心功能包括支持大多数Go语法、并发模型(goroutine和channel)、垃圾回收优化,以及针对ARM Cortex-M、RISC-V等架构的交叉编译。它还提供与Arduino、Adafruit Circuit Playground Express等开发板的硬件抽象层,方便控制GPIO、I2C、SPI等外设。适合嵌入式开发者、物联网工程师和Go语言爱好者,尤其是那些希望用Go的高生产力和类型安全来编写低功耗设备固件的人群。TinyGo在保持Go语言易用性的同时,显著降低了内存占用和二进制体积,是传统C/C++嵌入式开发的有力替代方案。

标签

项目特点

**极小的二进制体积**:只编译实际使用的代码,避免不必要的开销。
**广泛的微控制器支持**:支持超过 150 种开发板,如 Arduino Uno、Adafruit Circuit Playground Express、Seeed Studio XIAO-ESP32S3 等。
**WebAssembly 原生支持**:可编译为 WASM 和 WASI 目标,兼容 Fastly Compute、Fermyon Spin、wazero 等运行时。
**基于 LLVM 后端**:利用 LLVM 的优化能力,在特定场景下(如数值计算)可能比标准 Go 编译器更快。
**良好的 CGo 支持**:CGo 调用开销与普通函数调用相当。
**兼容标准库**:支持大部分 Go 标准库包,无需修改即可编译多数 Go 代码。

技术规格

编译器后端
支持语言
目标平台
支持的开发板
许可证
构建方式

项目资源

物料清单 (BOM)

物料名称 数量 参考价格 备注
TinyGo 编译器 1 从 GitHub 或官方安装包获取
Go 语言工具链 1 可选,用于标准 Go 开发
LLVM 1 TinyGo 依赖 LLVM 后端
支持的微控制器开发板 1 如 Arduino Uno、ESP32 等
USB 数据线 1 用于烧录程序到开发板
可选外设 若干 LED、传感器等,根据具体项目需求

所需工具

树莓派/开发板 必需
传感器模块

能力画像

⚪ 记忆与知识检索: 2/5
🔵 逻辑推演: 3/5
⚪ 表达与交流: 1/5
⚪ 感知与观察: 1/5
⚪ 数理与计算: 3/5
⚪ 动手与操作: 3/5
⚪ 狂热与坚持: 3/5
⚪ 创造与创新: 3/5

所需技能

🔧 **动手能力**:能够连接微控制器开发板、烧录程序、搭建简单电路(如 LED 闪烁)。 💻 **编程能力**:熟悉 Go 语言基础语法,了解命令行操作,能够阅读和理解 Go 代码。 ⚡ **电子电路**:了解微控制器的基本概念(GPIO、引脚配置),能够连接简单外设。

适用场景

**嵌入式开发**:使用 Go 语言编写微控制器程序,如 LED 控制、传感器数据采集、物联网设备固件。
**WebAssembly 应用**:将 Go 程序编译为 WASM/WASI 模块,在浏览器或服务器端 WebAssembly 运行时中运行,例如边缘计算、无服务器函数。
**命令行工具**:为资源受限的环境(如嵌入式 Linux 系统)编译小型高效的命令行工具。
**学习与实验**:探索 Go 语言在非传统平台上的应用,学习编译器原理和 LLVM 后端。