
TinyGo 是一款專門的 Go 編譯器,旨在將 Go 程式語言引入資源受限的環境,包括微控制器和 WebAssembly (WASM)。與為高效能伺服器優化並產生大型二進位檔案的標準 Go 編譯器不同,TinyGo 利用基於 LLVM 的後端來產生極其精簡且高效的機器碼。它支援超過 100 種微控制器開發板,例如 Arduino、BBC micro:bit 和 Nordic Semiconductor 晶片。透過提供 Go 標準函式庫的子集和自訂執行時期 (runtime),它使開發人員能夠在嵌入式系統和邊緣運算中利用 Go 的並發模型和語法,彌合了高階語言生產力與底層硬體控制之間的差距。
TinyGo 利用 LLVM 執行積極的無用程式碼消除 (dead-code elimination) 和最佳化。這使其能夠產生比標準 Go 編譯器小得多的二進位檔案,通常將大小從 MB 縮減至 KB。這對於像 Arduino Uno 這樣僅有 2KB SRAM 和 32KB 快閃記憶體的微控制器至關重要。
TinyGo 支援超過 100 種開發板,透過 'machine' 套件抽象化硬體特定的複雜性。這使開發人員能夠編寫可在不同架構(包括 AVR、ARM Cortex-M、ESP32 和 RISC-V)上執行的可攜式程式碼,而無需為每個新硬體目標重寫底層暫存器存取程式碼。
TinyGo 產生高度最佳化的 WASM 模組,非常適合瀏覽器應用程式和無伺服器邊緣函式。透過最小化執行時期佔用空間,它確保了更快的下載速度和更低的記憶體開銷,使其成為 WASI 相容環境中處理冷啟動延遲和記憶體限制等效能瓶頸的優選方案。
其自訂執行時期專為無作業系統的系統設計。它實作了一個支援 Go goroutines 的協作式排程器,讓開發人員能夠處理並發任務(如感測器輪詢和 LED 閃爍),而無需完整的 RTOS 開銷或手動中斷管理的複雜性。
TinyGo 專案維護了龐大的驅動程式生態系統,涵蓋常見的感測器、顯示器和致動器。這些驅動程式以慣用的 Go 語言編寫,使開發人員能夠以最少的樣板程式碼整合 OLED 螢幕或溫度感測器等硬體元件,顯著加速 IoT 和創客專案的原型設計階段。
工程師使用 TinyGo 編寫低功耗感測器節點程式以收集環境數據。透過利用 Go 的並發特性,他們可以在電池壽命有限的硬體上高效管理多個感測器和無線電模組 (LoRa/BLE),從而實現可靠且長期的部署。
開發人員將 TinyGo 編譯的 WASM 模組部署到邊緣閘道。這使他們能夠在邊緣端本地執行複雜的數據處理邏輯,與將原始數據發送到集中式雲端伺服器相比,降低了延遲和頻寬成本。
創客和愛好者使用 TinyGo 在 Raspberry Pi Pico 或 Arduino 等開發板上進行硬體原型設計。使用像 Go 這樣現代且型別安全的語言,使得除錯複雜的硬體互動比使用 C 或 C++ 更快速且直觀。
他們需要擺脫傳統的 C/C++ 工作流程,以提高程式碼安全性和開發速度。TinyGo 為他們提供了一種原生處理記憶體安全和並發的現代語言。
他們需要一種高效能語言,能編譯成適用於瀏覽器或邊緣環境的小型 WASM 二進位檔案。TinyGo 解決了標準 Go WASM 建置中常見的執行時期臃腫問題。
他們需要為大量裝置群組建構可擴展且易於維護的韌體。TinyGo 允許他們在雲端服務和邊緣硬體之間標準化其技術堆疊。
採用 BSD 3-Clause 授權的開源專案。完全免費使用、修改和分發,無任何商業限制。