Skill de Revisão de Build WASM & TinyGo
Verificações de tripla de destino, tamanho de binário e uso indevido de syscall/js para agentes - uma Skill de Agente estilo cookbook para builds WASM Go 1.26 e TinyGo.
Busque em todas as páginas da documentação
Verificações de tripla de destino, tamanho de binário e uso indevido de syscall/js para agentes - uma Skill de Agente estilo cookbook para builds WASM Go 1.26 e TinyGo.
Produz uma checklist de revisão de build WASM: GOOS/GOARCH corretos, syscall/js vs syscall/wasmimport, tags de destino TinyGo, orçamentos de tamanho, compatibilidade do runtime do host (wazero, wasmtime) e importações proibidas - antes do merge.
GOOS=wasip1 GOARCH=wasmsyscall/js| Entrada | Por quê |
|---|---|
| Targets de build | wasip1/wasm, js/wasm, placa TinyGo |
| Runtime do host | wazero, wasmtime, navegador |
| Orçamento de tamanho | Limite de KB para embarcado |
Versão go.mod / TinyGo | Disponibilidade de recursos |
| Importações do pacote principal | Sinaliza cgo, net, os/exec |
wasm-objdump, twiggy, tinygo size)syscall/js em módulos WASI - API exclusiva do navegador.os/exec ou sockets brutos em WASM sem documentação de capacidade do host.Cartão de receita de referência rápida - pronto para copiar e colar.
# Módulo WASI (Go 1.26)
GOOS=wasip1 GOARCH=wasm go build -o app.wasm ./cmd/wasi/
# Inspecionar exports e tamanho
wasm-objdump -x app.wasm | head -40
ls -la app.wasm
# Build restrita TinyGo (exemplo - verifique a placa)
tinygo build -target=wasi -o tiny.wasm ./cmd/edge/
# Smoke test wazero (host)
go test ./internal/wasmhost/... -run TestLoadModule -count=1Quando usar esta skill:
fmt.Println e net/http em um rascunho WASM de navegador| Target | Runtime | Superfície da API Go |
|---|---|---|
wasip1/wasm | wazero, wasmtime, Spin | Snapshot WASI |
js/wasm | Navegador | syscall/js |
| Placa TinyGo | MCU / WASM | Subconjunto do stdlib |
Veja Go em WebAssembly: Caminhos para Navegador, WASI e Embarcado
# Padrões proibidos em WASI
grep -rn 'syscall/js\|js\.Value' --include='*.go' ./cmd/wasi/
grep -rn 'cgo\|os/exec\|"net/http"' --include='*.go' ./cmd/wasi/| Achado | Ação |
|---|---|
syscall/js em build wasip1 | Bloqueador - dividir pacotes |
Servidor net/http em WASM | Bloqueador - usar RPC do host |
unsafe.Pointer cgo | Bloqueador, a menos que haja exceção na documentação do TinyGo |
ls -la app.wasm
# Opcional: twiggy top para hosts vinculados a Rust; wasm-objdump para wasm Gofunc TestLoadWASIModule(t *testing.T) {
ctx := context.Background()
r := wazero.NewRuntime(ctx)
defer r.Close(ctx)
mod, err := r.InstantiateWithConfig(ctx, wasmBytes,
wazero.NewModuleConfig().WithStartFunctions("_initialize"))
if err != nil {
t.Fatal(err)
}
defer mod.Close(ctx)
}_initialize e run/main exportados de acordo com o contrato do módulotinygo flash -target=pico -size=short ./cmd/firmware/ # exemplo - verifique a placa//go:build tinygo para caminhos de código divergentesMelhorias no runtime WASM do Go 1.26 podem alterar o comportamento de alocação - reavalie o tamanho após a atualização da toolchain.
Veja Runtime WASM e Melhorias de Memória do Go 1.26
syscall/js requer callbacks DOM e limpeza de js.FuncOf - revise vazamentos em targets de navegador.
WASI preview vs wasip1: tags de build e matriz de capacidade do host devem corresponder ao ambiente de implantação.
const e inicialização preguiçosa.| Abordagem | Quando |
|---|---|
| Rust WASM para tamanho crítico | Política da equipe |
| Revisão manual da plataforma | Um módulo |
| Apenas gate de tamanho de CI | Sem semântica de importação |
| Esta skill | Revisão de PR WASM assistida por agente |
Nunca. Divida os pacotes internal/browser e internal/wasi com tags de build.
A skill gera comandos de build; o teste no navegador em Chrome headless é um pipeline separado - link para a documentação da equipe.
Colete as necessidades de tamanho e stdlib nas entradas. TinyGo para orçamentos de KB; Go completo para stdlib mais rico em hosts WASI.
Versões da Stack: Esta página foi escrita para Go 1.26.x (padrão Green Tea GC, go fix modernizers - verifique o patch na build), chi (última versão - verifique na build), gin (última versão - verifique na build), echo (última versão - verifique na build), google.golang.org/grpc (última versão - verifique na build), sigs.k8s.io/controller-runtime (última versão - verifique na build), kubebuilder (última versão - verifique na build), tinygo (última versão - verifique os targets da placa na build), wazero (última versão - verifique na build) e golangci-lint (última versão - verifique o conjunto de linters na build).
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026