Sobre o projeto

TinyGo oferece uma cadeia de ferramentas de compilação alternativa para programas escritos em Go. Ele combina bibliotecas das ferramentas da linguagem Go com LLVM, visando casos de uso em que o tamanho do binário, o ambiente de implantação ou as restrições de hardware tornam o compilador padrão menos adequado. Para desenvolvimento embarcado, o TinyGo inclui um pacote `machine` para acesso ao hardware e pode compilar e gravar o mesmo programa em placas de microcontrolador suportadas selecionando um alvo, como Arduino Uno, Adafruit Circuit Playground Express ou Seeed Studio XIAO-ESP32S3. O projeto lista suporte para mais de 150 placas de microcontrolador. Para WebAssembly, o TinyGo pode compilar módulos WASM voltados para navegadores e programas WASI para servidores, ambientes de borda e hosts como Fastly Compute, Fermyon Spin e wazero. Ele suporta alvos WASI Preview 1 e funções WASM exportadas. Ele também pode compilar programas de linha de comando para Linux, macOS e Windows. As opções de instalação incluem configuração nativa e um contêiner Docker, com documentação e material de introdução publicados no site do TinyGo. Os objetivos declarados do projeto incluem binários pequenos, amplo suporte a microcontroladores, usabilidade de WebAssembly, interoperabilidade eficiente com CGo e compatibilidade com pacotes comuns da biblioteca padrão, para que muitos programas Go compilem sem modificações. Ele não pretende compilar todos os programas Go, igualar o compilador padrão `gc` em todos os cenários de desempenho ou otimizar principalmente para números extremamente grandes de goroutines. O TinyGo é licenciado principalmente sob a licença BSD de 3 cláusulas. Algum código LLVM importado usa uma variante Apache 2.0, e código derivado das bibliotecas Teensy usa a licença da PJRC, conforme indicado nos cabeçalhos dos arquivos relevantes. O suporte da comunidade está disponível através do canal #TinyGo no Gophers Slack, e as contribuições estão documentadas no site do projeto.