Boas Práticas para WebAssembly & TinyGo
Testando compilações WASM em CI e evitando syscall/js em módulos de servidor.
Busque em todas as páginas da documentação
Testando compilações WASM em CI e evitando syscall/js em módulos de servidor.
Estas regras mantêm os artefatos WASM portáteis, amigáveis ao sandbox e com tamanho apropriado, desde o primeiro protótipo até os hosts de produção.
GOOS=wasip1 GOARCH=wasm e testes rápidos wasmtime run à CI para pacotes guest.wasip1/wasm por padrão. Reserve js/wasm apenas para requisitos de DOM do navegador.syscall/js em pacotes WASI. Aplique com tags de compilação js && wasm em arquivos do navegador.-ldflags="-s -w". Mantenha artefatos não removidos no armazenamento da CI para triagem de crash.go list -deps para mains de guest. Rejeite imports acidentais de net/http/pprof ou apenas para testes em entrypoints de plugin.GOOS=wasip1 GOARCH=wasm go build ./... captura regressões de importação precocemente.tinygo build -target=wasm pode falhar enquanto as compilações gc passam.--dir / FSConfig do wazero).ls -lh na mesma fatia de funcionalidade, não apenas em hello-world..wasm.wasm_exec.js com sua toolchain Go. Incompatibilidade causa falhas de importação obscuras em navegadores.js.Func.Release() ao remover listeners. Evite vazamentos em páginas SPA de longa duração.main com select {} em guests de navegador. Sair de main desativa o runtime antes que os callbacks sejam acionados..wasm como application/wasm. Corrija os mapas MIME do servidor estático para instantiateStreaming.go fix modernizadores em pacotes compartilhados. O go fix do Go 1.26 mantém o código idiomático antes de compilar cruzado para WASM.Compilar plugins de servidor para js/wasm ou vazar syscall/js para compilações wasip1.
Use wasip1 por padrão e aplique tags de compilação na revisão.
GOOS=wasip1 GOARCH=wasm go build mais wasmtime run em pelo menos um binário guest representativo por módulo.
Sempre que os artefatos de deploy de produção forem produzidos com TinyGo, incluindo firmware de MCU e WASM de edge com limite de tamanho.
Adicione spin build e roteie testes; gatilhos HTTP podem substituir listeners net/http brutos em guests.
Sim, em go.mod junto com Go 1.26.x.
As APIs de runtime evoluem; atualizações devem executar testes de integração de embed.
signext e satconv são ignorados de acordo com as notas de release.
Leia a documentação atual a cada atualização em vez de copiar flags antigas.
Use wasmtime run --dir $(pwd)::/work (ou caminhos mais restritos) e mantenha os mesmos mounts na configuração do módulo wazero.
Toolchain escolhida, medições de tamanho/memória, alternativas rejeitadas, runtime do host e matriz de capacidade para FS/env/rede.
Versões da Stack: Esta página foi escrita para Go 1.26.x (padrão Green Tea GC, modernizadores go fix - verifique o patch na compilação), chi (última versão - verifique na compilação), gin (última versão - verifique na compilação), echo (última versão - verifique na compilação), google.golang.org/grpc (última versão - verifique na compilação), sigs.k8s.io/controller-runtime (última versão - verifique na compilação), kubebuilder (última versão - verifique na compilação), tinygo (última versão - verifique os targets de placa na compilação), wazero (última versão - verifique na compilação) e golangci-lint (última versão - verifique o conjunto de linters na compilação).
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026