Habilidad de Revisión de Compilación de WASM y TinyGo
Comprobaciones de triple de destino, tamaño de binario y mal uso de syscall/js para agentes: una Habilidad de Agente estilo cookbook para compilaciones Go 1.26 y TinyGo WASM.
Busca en todas las páginas de la documentación
Comprobaciones de triple de destino, tamaño de binario y mal uso de syscall/js para agentes: una Habilidad de Agente estilo cookbook para compilaciones Go 1.26 y TinyGo WASM.
Produce una lista de verificación de revisión de compilación de WASM: GOOS/GOARCH correctos, syscall/js vs syscall/wasmimport, etiquetas de destino de TinyGo, presupuestos de tamaño, compatibilidad del tiempo de ejecución del host (wazero, wasmtime) e importaciones prohibidas, antes de la fusión.
GOOS=wasip1 GOARCH=wasmsyscall/js| Entrada | Por qué |
|---|---|
| Objetivos de compilación | wasip1/wasm, js/wasm, placa TinyGo |
| Tiempo de ejecución del host | wazero, wasmtime, navegador |
| Presupuesto de tamaño | Límite de KB para integrados |
Versión de go.mod / TinyGo | Disponibilidad de características |
| Importaciones del paquete principal | Marcar cgo, net, os/exec |
wasm-objdump, twiggy, tinygo size)syscall/js en módulos WASI - API solo para navegador.os/exec ni sockets crudos en WASM sin documentación de capacidad del host.Tarjeta de receta de referencia rápida, lista para copiar y pegar.
# Módulo WASI (Go 1.26)
GOOS=wasip1 GOARCH=wasm go build -o app.wasm ./cmd/wasi/
# Inspeccionar exportaciones y tamaño
wasm-objdump -x app.wasm | head -40
ls -la app.wasm
# Compilación restringida de TinyGo (ejemplo - verificar placa)
tinygo build -target=wasi -o tiny.wasm ./cmd/edge/
# Prueba de humo de wazero (host)
go test ./internal/wasmhost/... -run TestLoadModule -count=1Cuándo recurrir a esta habilidad:
fmt.Println y net/http en un borrador de WASM para navegador| Destino | Tiempo de ejecución | Superficie de API de Go |
|---|---|---|
wasip1/wasm | wazero, wasmtime, Spin | Instantánea WASI |
js/wasm | Navegador | syscall/js |
| Placa TinyGo | MCU / WASM | Subconjunto de stdlib |
Ver Go en WebAssembly: Rutas de Navegador, WASI y Embebidas
# Patrones prohibidos en WASI
grep -rn 'syscall/js\|js\.Value' --include='*.go' ./cmd/wasi/
grep -rn 'cgo\|os/exec\|"net/http"' --include='*.go' ./cmd/wasi/| Hallazgo | Acción |
|---|---|
syscall/js en compilación wasip1 | Bloqueador - dividir paquetes |
Servidor net/http en WASM | Bloqueador - usar RPC del host |
unsafe.Pointer cgo | Bloqueador a menos que haya excepción en la documentación de TinyGo |
ls -la app.wasm
# Opcional: twiggy top para hosts enlazados con Rust; wasm-objdump para wasm de 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 y la exportación run/main según el contrato del módulotinygo flash -target=pico -size=short ./cmd/firmware/ # ejemplo - verificar placa//go:build tinygo para rutas de código divergentesLas mejoras en el tiempo de ejecución WASM de Go 1.26 pueden cambiar el comportamiento de asignación: re-evaluar el tamaño después de la actualización de la cadena de herramientas.
Ver Tiempo de Ejecución WASM y Mejoras de Memoria de Go 1.26
syscall/js requiere callbacks DOM y limpieza de js.FuncOf - revisión de fugas en objetivos de navegador.
WASI preview vs wasip1: las etiquetas de compilación y la matriz de capacidades del host deben coincidir con el entorno de despliegue.
| Enfoque | Cuándo |
|---|---|
| Rust WASM para tamaño crítico | Política del equipo |
| Revisión manual de plataforma | Un módulo |
| Solo puerta de tamaño de CI | Sin semántica de importación |
| Esta habilidad | Revisión de PR WASM asistida por agente |
Nunca. Dividir paquetes internal/browser y internal/wasi con etiquetas de compilación.
La salida de la habilidad son comandos de compilación; la prueba en navegador en Chrome sin cabeza es un pipeline separado - enlazar la documentación del equipo.
Recopilar el tamaño y las necesidades de la biblioteca estándar en las entradas. TinyGo para presupuestos de KB; Go completo para una biblioteca estándar más rica en hosts WASI.
Versiones de Stack: Esta página fue escrita para Go 1.26.x (predeterminado Green Tea GC, go fix modernizers - verificar parche en la compilación), chi (última - verificar en la compilación), gin (última - verificar en la compilación), echo (última - verificar en la compilación), google.golang.org/grpc (última - verificar en la compilación), sigs.k8s.io/controller-runtime (última - verificar en la compilación), kubebuilder (última - verificar en la compilación), tinygo (última - verificar objetivos de placa en la compilación), wazero (última - verificar en la compilación) y golangci-lint (última - verificar conjunto de linters en la compilación).
Revisado por Chris St. John·Última actualización: 16 jul 2026